Struts Token 使用

Struts Token 使用
 

1,先在一个Action中,调用saveToken(HttpServletRequest request)方法。然后转向带有表单的JSP页面。

2,在JSP页面提交表单给一个Action,再这个Action中进行是否为重复提交的判断。


              if (isTokenValid(request, true)) {

                     // 未重复提交时,正确的时候应该做的事情

                  return mapping.findForward("success");

              } else {

            // 重复提交时,需要做的事情

                  saveToken(request);

                  return mapping.findForward("error");

              }


 

Struts Token 机制:
 

1,  由第一个Action调用saveToken(HttpServletRequest request),这个方法内部实现如下:


    protected void saveToken(HttpServletRequest request) {

        token.saveToken(request);

}


 

        token.saveToken(request);

       这个方法的实现如下:


    public synchronized void saveToken(HttpServletRequest request) {

        HttpSession session = request.getSession();

        String token = generateToken(request);

        if (token != null) {

            session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);

        }

}


 

这个方法调用generateToken方法实现如下:


    public synchronized void saveToken(HttpServletRequest request) {

        HttpSession session = request.getSession();

        String token = generateToken(request);

        if (token != null) {

            session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);

        }

}

generateToken完毕后,将得到的唯一值setAttribute到session中。

            session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);
 

Globals.TRANSACTION_TOKEN_KEY的值是:” org.apache.struts.action.TOKEN”

然后跳转到JSP页面。

2,  JSP页面的Struts自定义标签 <html:form>的标签类:org.apache.struts.taglib.html. FormTag

这个类的doStartTag()方法会调用本类的renderToken()方法。


    protected String renderToken() {

        StringBuffer results = new StringBuffer();

        HttpSession session = pageContext.getSession();

        if (session != null) {

            String token =

                (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);

               

            if (token != null) {

                results.append("<input type=/"hidden/" name=/"");

                results.append(Constants.TOKEN_KEY);

                results.append("/" value=/"");

                results.append(token);

                if (this.isXhtml()) {

                    results.append("/" />");

                } else {

                    results.append("/">");

                }

            }

        }

        return results.toString();

}


 

这样子会生成类似于

<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
         value="6aa35341f25184fd996c4c918255c3ae">
 

的隐藏标签。

然后提交到一个Action中,在Action中用isTokenValid()方法进行比较session中” org.apache.struts.action.TOKEN”的这个key所对应的值和提交来的request中的” org.apache.struts.action.TOKEN”的这个value是否一致。

如果为true,那么证明可以提交。如果为false,证明已经重复,不允许提交。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shanghui815/archive/2010/09/05/5865092.aspx

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值