做每个功能时都要加上这几种验证

本文介绍了如何使用Struts框架确保应用程序的安全性,包括限制未登录用户的访问、验证用户输入的有效性和合法性、防止多用户在同一账号下同时登录等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:做每个功能时都得注意这个功能模块部分是否让没有登陆的用户访问?
如果不允许,记得加上下面的代码:

Java代码
public Actis validate(ActionMapping mapping,
HttpServletRequest request) {
Actis errors = new Actis() ;
//因错误信息会在action之前被加载,所以在validate方法里加入用户退出后不允许访问的判断
if (request.getSession().getAttribute("sessionUserName")==null||"".equals(request.getSession().getAttribute("sessionUserName")))
{
mapping.findForward("sessionEnded") ;
}
else
{
//机动车违法数据收费记录修改号牌号码
if(chargeAnnalUpdateBrandNumberInput==null||"".equals(chargeAnnalUpdateBrandNumberInput))
{
errors.add("errorChargeAnnalUpdate",new ActionMessage("chargeAnnalUpdateBrandNumberInput.null")) ;
}
else
{
if(chargeAnnalUpdateBrandNumberInput.length()!=5)
{
errors.add("errorChargeAnnalUpdate",new ActionMessage("chargeAnnalUpdateBrandNumberInput.leng")) ;
}
}
}
return errors;
}

public Actis validate(ActionMapping mapping,
HttpServletRequest request) {
Actis errors = new Actis() ;
//因错误信息会在action之前被加载,所以在validate方法里加入用户退出后不允许访问的判断
if (request.getSession().getAttribute("sessionUserName")==null||"".equals(request.getSession().getAttribute("sessionUserName")))
{
mapping.findForward("sessionEnded") ;
}
else
{
//机动车违法数据收费记录修改号牌号码
if(chargeAnnalUpdateBrandNumberInput==null||"".equals(chargeAnnalUpdateBrandNumberInput))
{
errors.add("errorChargeAnnalUpdate",new ActionMessage("chargeAnnalUpdateBrandNumberInput.null")) ;
}
else
{
if(chargeAnnalUpdateBrandNumberInput.length()!=5)
{
errors.add("errorChargeAnnalUpdate",new ActionMessage("chargeAnnalUpdateBrandNumberInput.leng")) ;
}
}
}
return errors;
}因为validate方法是最先被加载的,所以在这里判断用户有没有登陆是最准确最安全的

2:用户退出之后还有没有权限访问这个页面?如果退出了就不允许访问了,就要加上下面的代码,因为用户退出了还可以点后退按钮进入缓存来进行操作,加上下面的代码就操作不了了

Java代码
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
//判断用户退出后不允许进行操作,返回至登陆页面
if (request.getSession().getAttribute("sessionUserName")==null||"".equals(request.getSession().getAttribute("sessionUserName")))
{
return mapping.findForward("sessionEnded");
}
else
{

}

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
//判断用户退出后不允许进行操作,返回至登陆页面
if (request.getSession().getAttribute("sessionUserName")==null||"".equals(request.getSession().getAttribute("sessionUserName")))
{
return mapping.findForward("sessionEnded");
}
else
{

}下面该写什么写什么代码。。。

3:jsp页面:文本框允许输入什么值不允许输入什么要做判断:
Html代码
<html:text property="chargeStatInvoiceNumberInput" style="ime-mode:disabled" down="onlyNum();"/>
onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||(event.keyCode==8)))
event.returnValue=false;
}

<html:text property="chargeStatInvoiceNumberInput" style="ime-mode:disabled" down="onlyNum();"/>
onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||(event.keyCode==8)))
event.returnValue=false;
}
红字指屏蔽了输入法,就是不可以输入汉字
蓝字指屏蔽了英文和各种符号和tab键回车键等
也就是说上边的文本框只能输入汉字,对于长度的判断可以去form的validate里进行判断

Java代码
//驾驶员查询身份证号码
if(driverQueryIdentityCardNumberInput==null||"".equals(driverQueryIdentityCardNumberInput))
{
errors.add("errorDriverQuery",new ActionMessage("driverQueryIdentityCardNumberInput.null")) ;
}
else
{
if(driverQueryIdentityCardNumberInput.length()!=15&&driverQueryIdentityCardNumberInput.length()!=18)
{
errors.add("errorDriverQuery",new ActionMessage("driverQueryIdentityCardNumberInput.leng")) ;
}
}

//驾驶员查询身份证号码
if(driverQueryIdentityCardNumberInput==null||"".equals(driverQueryIdentityCardNumberInput))
{
errors.add("errorDriverQuery",new ActionMessage("driverQueryIdentityCardNumberInput.null")) ;
}
else
{
if(driverQueryIdentityCardNumberInput.length()!=15&&driverQueryIdentityCardNumberInput.length()!=18)
{
errors.add("errorDriverQuery",new ActionMessage("driverQueryIdentityCardNumberInput.leng")) ;
}
}
上边的是对一个功能的检查

对一个项目也要进行检查

1:每个帐号应该同时只能在一台电脑上登陆,如果有其他人在其他电脑登陆,那么需要把先前登陆的人给踢掉线,让他不允许进行操作,实现代码如下:

Java代码
public Actis validate(ActionMapping mapping,
HttpServletRequest request) {
Actis errors = new Actis() ;
HttpSession session = request.getSession();
System.out.println(session);
/*
* 下面这句话用来判断现在正在登陆的这个帐号有没有登陆
* 如果没有登陆则正常登陆
* 如果有人已经登陆了,就把先前登陆的人踢下线,让后登陆的人可以登陆
*/
SessionDestroy.getInstance(this.getServlet()).setSession(userName, servlet, session, mapping);

public Actis validate(ActionMapping mapping,
HttpServletRequest request) {
Actis errors = new Actis() ;
HttpSession session = request.getSession();
System.out.println(session);
/*
* 下面这句话用来判断现在正在登陆的这个帐号有没有登陆
* 如果没有登陆则正常登陆
* 如果有人已经登陆了,就把先前登陆的人踢下线,让后登陆的人可以登陆
*/
SessionDestroy.getInstance(this.getServlet()).setSession(userName, servlet, session, mapping);
这句话是在登陆的form里,这句话调用的类是下面的代码:

Java代码
package struts.form;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionMapping;

public class SessionDestroy
{
private static SessionDestroy sessionDestroy;
// private HttpServlet servlet;
public SessionDestroy(HttpServlet servlet)
{
// this.servlet = servlet;
}
public static SessionDestroy getInstance(HttpServlet servlet)
{
if (sessionDestroy==null)
{
sessionDestroy=new SessionDestroy(servlet);
}
return sessionDestroy;
}

public void setSession(String userName,HttpServlet servlet,HttpSession session,ActionMapping mapping)
{
final ServletContext sc = servlet.getServletContext();//取得容器,容器中根据用户唯一标识userID存放session
System.out.println(sc);
System.out.println(session);
if (sc.getAttribute(userName) != null)
{
// 第二次登陆后第一次无效
((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session
System.out.println(session);
}
sc.setAttribute(userName, session);//放入当前最新session
mapping.findForward("sessionDestroy") ;
}

}

package struts.form;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionMapping;

public class SessionDestroy
{
private static SessionDestroy sessionDestroy;
// private HttpServlet servlet;
public SessionDestroy(HttpServlet servlet)
{
// this.servlet = servlet;
}
public static SessionDestroy getInstance(HttpServlet servlet)
{
if (sessionDestroy==null)
{
sessionDestroy=new SessionDestroy(servlet);
}
return sessionDestroy;
}

public void setSession(String userName,HttpServlet servlet,HttpSession session,ActionMapping mapping)
{
final ServletContext sc = servlet.getServletContext();//取得容器,容器中根据用户唯一标识userID存放session
System.out.println(sc);
System.out.println(session);
if (sc.getAttribute(userName) != null)
{
// 第二次登陆后第一次无效
((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session
System.out.println(session);
}
sc.setAttribute(userName, session);//放入当前最新session
mapping.findForward("sessionDestroy") ;
}

}
3:有没有返回按钮,虽然只是个超链接,但是有返回按钮会方便很多

Java代码
<html:button property="PassWordReturnButton" ="PassWordReturnJava();">返回</html:button>

<script language="java" type="text/java">
PassWordReturnJava()
{
location.href = "SystemMaintenance.jsp";
}
</script>

<html:button property="PassWordReturnButton" ="PassWordReturnJava();">返回</html:button>

<script language="java" type="text/java">
PassWordReturnJava()
{
location.href = "SystemMaintenance.jsp";
}
</script> 暂时也就这么多吧,想起来再加上去

黑色头发 http://heisetoufa.iteye.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值