`
lovemybook
  • 浏览: 39633 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

struts2 重复提交拦截器用法 token与token-session

阅读更多
首先要在jsp的from标签里加入<s:token/>防重复提交标签,<s:token/> 生成如下的内容:(struts.token.name 标识哪个隐藏域存了 token 值)
     <input type="hidden" name="struts.token.name" value="struts.token"/>
     <input type="hidden" name="struts.token" value="7GXL55LPSGU19SDC9D3VP54I20XT3BVA"/>
注意自定义的表单域别重名了。它的作用是防止表单重复提交,每次加载页面 struts.token 的值都不一样,如果两次提交时该值一样,则认为是重复提交。此时要启用 TokenInterceptor(token) 拦截器,最好是也启用 TokenSessionStoreInterceptor(token-session) 拦截器,不然后台会出现错误提示:

2008-11-17 20:39:21 com.opensymphony.xwork2.interceptor.ParametersInterceptor setParameters
严重: ParametersInterceptor - [setParameters]: Unexpected Exception catched: Error setting expression 'struts.token' with value '[Ljava.lang.String;@1c2e163'
2008-11-17 20:39:21 com.opensymphony.xwork2.interceptor.ParametersInterceptor setParameters
严重: ParametersInterceptor - [setParameters]: Unexpected Exception catched: Error setting expression 'struts.token.name' with value '[Ljava.lang.String;@abaf8c'

但不影响使用。不过如果只有 token-session 拦截器却是不行的。

token 和 token-session 拦截器的启用,是在 struts.xml 配置文件中,既可以为包启用,也可以单独为某个 action 启用:

1) 为包启用 token 和 token-session

<package name="TestStruts" extends="struts-default">  
    <interceptors>  
    <interceptor-stack name="myStack">  
        <interceptor-ref name="token"/>  
        <interceptor-ref name="token-session"/>  
    <interceptor-ref name="defaultStack" />               
    </interceptor-stack>  
    </interceptors>  
    <default-interceptor-ref name="myStack" />  
    <action name="Login" class="com.unmi.struts2.action.LoginAction">  
        <result name="input">/login.jsp</result>  
        <result name="invalid.token">/exception.jsp</result>  
    </action>  
............................................................................

2) 为 Action 启用 token 和 token-session

<action name="Login" class="com.unmi.struts2.action.LoginAction">  
    <interceptor-ref name="token" />  
    <interceptor-ref name="token-session" />  
    <interceptor-ref name="defaultStack" />  
    <result name="input">/login.jsp</result>  
    <result name="invalid.token">/exception.jsp</result>   
</action>

............................................................................


注意 token、token-session 和 defaultStack 的顺序要保证,还需要加上名为 "invalid.token" 的 result,当发现重复提交时转向到这个逻辑页,如 /exception.jsp,在 /exception.jsp 加上 <s:actionerror /> 在出现重复提交时就会提示:The form has already been processed or no token was supplied, please try again.

<interceptor-ref name="token"/>  <interceptor-ref name="token-session"/><!--注意struts2.0 拦截器名字为token-session struts2.1.2 已经更改为tokenSession -->
token: 在活动中检查合法令牌(token), 防止表单的重复提交;
token-session: 同上, 但是在接到非法令牌时将提交的数据保存在session中;
分享到:
评论
4 楼 gx460202720 2011-11-05  
    good  。。。。。。
3 楼 baiweiyll 2010-04-25  
我的情况和你差不多,我是因为action有很多方法,但是有些方法对应请求的那个页面没有<s:token/> 也就是唯一标志没有,所以每次都回跳转到自己配的页面,只要在请求页面加上<s:token/>就不会了,但是好像有很多方法是不需要做重复提的,我也还在解决中。。。
2 楼 lydawen 2010-04-02  
应该是
vera_sq 写道
你好,我按照你写的方法做了,我是为为 Action 启用 token 和 token-session ,可是每次一进那个action,他就直接跳转到exception.jsp页面了,这是怎么回事呢?谢谢了



应该是tokenSession
1 楼 vera_sq 2009-09-09  
你好,我按照你写的方法做了,我是为为 Action 启用 token 和 token-session ,可是每次一进那个action,他就直接跳转到exception.jsp页面了,这是怎么回事呢?谢谢了

相关推荐

    JavaEE Struts2利用tokenSession防止重复提交

    JavaEE Struts2利用tokenSession防止重复提交

    tokenSession拦截器的使用

    防止重复提交 之 更强大的tokenSession拦截器

    struts2利用token防止表单重复提交(源代码)

    struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...

    拦截器和控制器的区别

    3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,优先拦截器 5、拦截器是包裹在过滤器中使用的。 复习 converter 转换器 ...

    深入浅出Struts2(附源码)

    15.3 使用Token Session拦截器 256 15.4 小结 257 第16章调试与性能分析 258 16.1 debug标签 258 16.2 Debugging拦截器 259 16.3 性能分析 261 16.4 小结 262 第17章进度条 263 17.1 Execute and Wait拦截器...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    15.3 使用Token Session拦截器 256 15.4 小结 257 第16章 调试与性能分析 258 16.1 debug标签 258 16.2 Debugging拦截器 259 16.3 性能分析 261 16.4 小结 262 第17章 进度条 263 17.1 Execute and Wait拦截器 263...

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    spring security 参考手册中文版

    25.1 AOP联盟(MethodInvocation)安全拦截器 197 25.1.1显式MethodSecurityInterceptor配置 197 25.2 AspectJ(JoinPoint)安全拦截器 198 26.基于表达式的访问控制 200 26.1概述 200 26.1.1通用内置表达式 201 ...

Global site tag (gtag.js) - Google Analytics