`

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

阅读更多
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

分享到:
评论

相关推荐

    crc16验证C#XModem数据通讯验证源码

    2. 循环处理每个字节:对于每个字节,我们将其与CRC寄存器异或,然后根据多项式位移寄存器中的每一位。如果最高位为1,则将CRC寄存器右移一位并用0填充;如果最高位为0,则保持不变。这个过程会一直持续到处理完所有...

    java+spring-boot-jwt + spring security集成实战项目.zip

    它允许用户信息在多个服务之间安全地传递,而无需在每个请求中携带Session信息。在Spring Boot项目中,我们可以使用Spring Security的JWT扩展来实现登录验证和令牌管理。 项目的实施步骤可能包括以下几个关键部分:...

    SAP B1 极具震撼力的的流程控制功能详细分析

    在 SAP B1 中,流程控制功能可以分为以下几个方面: 1. 数据验证控制:可以对数据进行验证,以确保数据的正确性和一致性。 2. 逻辑控制:可以根据不同的逻辑规则来控制数据的操作,例如根据销售人员的权限来控制...

    Web开发-如何实现Bearer模式的Token验证-Python实例源码.zip

    在上述代码中,`authenticate`函数负责验证Token,`jwt_required`装饰器用于检查每个受保护的API请求的Token。注意替换`SECRET_KEY`为实际的密钥,并实现`authenticate`函数以与你的用户系统集成。 Bearer模式的...

    投票系统ASP加上Acess的源码设计

    7. **错误处理**:良好的错误处理机制,确保系统在遇到问题时能够给出适当的反馈。 这个简单的投票系统源码设计,对于学习ASP编程和数据库操作的初学者来说,是一个很好的实践项目。通过研究源码,你可以了解如何在...

    保证Linux安全的几种方法.pdf

    此外,确保检查`/etc/services`文件,确认每个端口的设置,防止因未授权服务暴露而造成的安全隐患。进一步地,修改`/etc/rc.d/rc[runlevel].d/`目录下的文件,可以避免在系统启动时自动运行不必要的服务,从而降低被...

    视频的刻录加上传

    常见的音频编码有AAC、MP3、FLAC等,每种格式都有其特点,如音质、文件大小和兼容性。在刻录过程中,我们需要确保音频文件与视频文件同步,并且格式被正确处理。 接下来,**上传**环节通常指的是将刻录好的视频文件...

    国际书号的验证方法

    3. 找出最小的非负整数x,使得总和加上x后能被10整除,这个x就是校验码。 例如,对于ISBN 978-7-121-21720-2,其校验码的计算过程如下: \[9*1 + 7*3 + 8*1 + 7*3 + 1*1 + 2*3 + 1*1 + 7*3 + 2*1 + 0*3 + 2*1 = 9 ...

    CRC校验码的生成及码块分割_码块分割_crc_CRC校验

    在接收端,每个接收到的码块都要独立进行CRC校验,以验证其完整性。 在提供的压缩包文件"CRC校验码的生成及码块分割"中,可能包含详细算法实现、示例代码、以及与3GPP 36.212协议相关的解释文档,这些资源可以帮助...

    C# TextBox中只能输入数字的几种常用方法

    本文将详细介绍几种常用的实现方法,并通过示例代码来解释每种方法的工作原理。 #### 方法一:基本数字验证 **代码示例**: ```csharp private void textBox2_KeyPress(object sender, KeyPressEventArgs e) { /...

    算法练习-用逗号分隔列表-少儿编程scratch项目源代码文件案例素材.zip

    当遍历到每个元素时,可以将其与逗号连接起来,最后加上一个结束的逗号或换行符。 4. 字符串连接:在Scratch中,可以使用"文本+文本"积木块来连接字符串。在这个项目中,孩子们会学到如何将列表元素(字符串)与...

    md5加密算法的两种方法

    3. **MD5计算**:通过四个不同的函数(F, G, H, I)和四个32位的变量A, B, C, D,对每个消息块进行迭代运算,这些变量在每次迭代后都会更新。 4. **结果组合**:经过多次迭代后,四个变量A, B, C, D的值就是最终的MD...

    ATmega128几个常用程序例子.doc

    每个都有其优缺点,例如ICC AVR易于使用但功能较为基础,WinAVR则需要手动编写或自动生成Makefile,而Code Vision AVR可能需要更多时间去适应。需要注意的是,不同开发工具使用的头文件可能会有所不同,如ICC AVR...

    4_LabVIEW数码管_数码管_

    每个数码管段通常用一个布尔值表示,总共需要7个布尔值来控制所有段,加上一个附加的点段(共8位)。在本例中,我们会创建三个这样的七段数码管控件,分别显示输入二进制数对应的十进制的每一位。 4. **控制逻辑**...

    自己写的AES加密算法,输出每一步的结果

    这是非线性的步骤,每个字节都会通过一个查找表(S-Box)进行替换,使得加密过程更加复杂,增加破解的难度。 3. **行移位**(ShiftRows): 行移位操作对每个128位的字进行,将每一行的字节向左循环移位。第一行...

    为每个页面加上Session判断的小例子

    要将这个Session判断应用到每个页面,你需要让所有页面都继承自`JudgeSession`类。例如: ```csharp public partial class QrDeptMan_Home : FuSession.JudgeSession ``` 这样,每当`QrDeptMan_Home`页面被加载时...

    计算某一天是某一年的第几天

    为了计算日期在当年的位置,我们需要将每个月的天数累加起来。对于非闰年,2月有28天,其他月份的天数可以按照常规记忆(如1月31天,2月28天,3月31天等)。对于闰年,2月有29天,判断是否为闰年的规则是:能被4整除...

    计算机组成原理课程设计——微程序设计报告书.pdf

    2. 实现微代码:为每个机器指令编写相应的微程序,微程序由一系列微指令组成,每个微指令对应计算机执行的一个基本操作。 3. 编写应用程序:根据定义的指令集,设计并编写测试程序,确保所有指令都能正确执行。 4. ...

Global site tag (gtag.js) - Google Analytics