标签:Struts2 token 重复提交 <s:token>是Struts2中为了防止表单重复提交的标签,这个标签的实现类是org.apache.struts2.views.jsp.ui.TokenTag,这个类是关键的父类是org.apache.struts2.views.jsp.ComponentTagSupport。 第一、 TokenTag ComponentTagSupport.doStartTag 将控件对象化 TokenTag ComponentTagSupport.doEndTag component.end 调用component(Token) Token 继承自org.apache.struts2.components.UIBean,因此首先调用UIBean.end方法,在UIBean.end方法中最后一句调用定义为protected的方法evaluateExtraParams,这个方法是提供给UIBean的子类扩展使用的,在Token的evaluateExtraParams方法中 String token = buildToken(tokenName); 其中buildToken方法实际上调用的是 TokenHelper.setToken方法,在setToken方法中值得注意的是两点, 1 generateGUID()方法,此方法是生成Token值得算法所在 2 session.put(tokenName, token)可以看到此处将生成的值存储在session中,等待以后比对。 第二、 到此<s:token>已经完成了他的任务,之后的比对来判断是否为重复提交,Struts2是通过interceptor来完成的TokenInterceptor,调用TokenHelper.validToken方法,此方法从Parameters中取出token值来和session里比较,如果不一样return false |