struts中的token机制使用

         使用token可以解决重复提交问题,这里的重复提交一个指的是可能连续点击提交按钮,从而导致同一表单的重复提交。另外一种情况指的是提交成功后点击后退,退回到刚才的页面,继续提交。下面以一个注册用户的页面为例。

         首先在跳转到需要提交的表单页面之前必须先创建令牌。即必须在跳转到该页面之前执行saveToken(request)。例如,可以在跳转到注册页面前的ActionServlet中创建令牌,并且saveToken(request)方法同时将令牌保存在了当前session中(beforeResisterAction是跳转到注册页面前的Action):

       

public beforeRegisterAction extends Action{
         public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception {
                  this.saveToken(request);
                  return new ActionForward("register.jsp");
}
}

 

        然后在跳转到register.jsp页面时,需要使用html自带的标签<html:form>才可,可以在改页面的源码中看到

<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"value="6164b68f90b167bdb952be7b5bc833be">html:form标签自动给你生成的一行,这个value即为在beforeRegisterAction中struts根据当前时间生成的一个令牌值,在注册页面提交时,该令牌值也一起提交到后台处理程序:

  

public  class RegisterAction  extends Action{
           public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception {
           //isTokenValid(request)方法是验证令牌有效性的方法,通过把session中的令牌值和刚才在注册表单中一起提交的令牌值进行比较来验证令牌是否正确
           if(!isTokenValid(request)){
          //如果无效的话则重新设置令牌,可以进行自己的逻辑处理
           。。。。。。。。
	this.saveToken(request);
    	return (new ActionForward(mapping.getInput()));
          }else{
                 //如果令牌有效的话,需要先将令牌重置,然后下面接着自己的逻辑处理即可
    	 resetToken(request);
    	}
        。。。。。。。。。。。
}

       以上即简单的演示了token的是使用过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值