`
lovemybook
  • 浏览: 40087 次
  • 性别: 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防止重复提交

    4. **验证与处理**:当表单提交后,Struts2的tokenSession拦截器会自动进行token的验证。如果验证通过,业务逻辑正常执行;若失败,则会抛出异常,提示用户重新操作。 在实际应用中,我们还需要考虑一些其他情况,...

    tokenSession拦截器的使用

    在Java Web应用开发中,Struts2框架提供了一种非常实用的方法来解决这个问题——通过使用`tokenSession`拦截器。相比于传统的`token`拦截器,`tokenSession`提供了更加灵活和友好的用户体验。本文将深入探讨`token...

    Struts2防止重复提交解决方案

    本文将深入探讨Struts2防止重复提交的解决方案,包括拦截器的配置、重复提交的原因以及`token`机制的工作原理。 首先,了解Struts2拦截器的基础知识是至关重要的。在Struts2框架中,拦截器是基于AOP(面向切面编程...

    struts token机制解决表单重复提交

    1. **配置Action**:在Struts的配置文件(struts.xml或struts.properties)中,为需要防止重复提交的Action添加一个拦截器,通常是`token`和`tokenSession`拦截器。 2. **生成Token**:在Action的准备方法(Prepare...

    struts2_token控制刷新重复提交

    3. **验证Token:** 在处理表单提交的Action方法中,Struts2的Token拦截器会自动进行Token验证。如果验证失败(比如因为用户刷新页面),拦截器会抛出一个`TokenException`,你可以捕获这个异常并处理。 ```java ...

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

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

    Struts 之旅 - 重复提交 token

    同时,需要在 struts.xml 配置文件中,配置拦截器链,包含 token 相关的拦截器,如 `token` 或 `tokenSession`。 7. **注意事项**:虽然 token 机制可以有效地防止重复提交,但并不能完全防止恶意攻击,比如 CSRF...

    拦截器防止重复提交的设置步骤

    Token 拦截器是 Struts2 提供的一个特殊的拦截器,用于防止重复提交。 Token 机制 Token 机制是 Struts2 的一个安全机制,用于防止重复提交。Token 是一个唯一的标识符,用于标识一个请求。在提交表单时,Struts2 ...

    struts2的token实现.

    1. **启用Token插件**:在Struts2的配置文件`struts.xml`中,需要启用Token拦截器栈,如下所示: ```xml &lt;package name="default" extends="struts-default"&gt; &lt;interceptor-stack name="myStack"&gt; ...

    sturts2防止表单的重复提交 token

    `TokenSessionStoreInterceptor` 和 `TokenInterceptor` 是两个常用的Struts2拦截器,它们分别将Token存储在session和cookie中。使用时,只需在Action配置中添加对应的拦截器即可。 下面是一个简单的配置示例: ```...

    自定义拦截器实现防止重复提交

    当用户再次提交表单时,如果提交的令牌与会话中的令牌不匹配,拦截器就会识别为重复提交,并返回一个错误提示(如"invalidToken"),防止请求继续执行。 接下来,我们需要一个工具类`RandomGUIDUtil`来生成唯一的...

    struts2 防止表单重复提交的例子

    5. **Struts2配置**:在Struts2的配置文件(struts.xml)中,需要添加Token拦截器到Action配置中。例如: ``` &lt;interceptor-ref name="token"&gt; &lt;/interceptor-ref&gt; &lt;interceptor-ref name="tokenSession"&gt; ...

    struts2token回退刷新

    Struts2 Token回退刷新是一种防止重复提交的安全机制,尤其在处理并发操作和防止 CSRF(跨站请求伪造)攻击时显得尤为重要。Struts2框架提供了一种令牌验证的方式来确保每个表单提交是唯一的,避免了恶意用户通过...

    struts token 防止页面刷新,重复提交

    在Struts框架中,Token机制主要通过`&lt;s:token&gt;`标签和`TokenInterceptor`拦截器实现。但在某些情况下,可能需要自己手动实现Token机制。下面基于提供的代码片段详细介绍如何实现Struts中的Token机制。 #### 三、...

    struts2实现的简单登陆 附加拦截器防止重复提交

    在这个"struts2实现的简单登陆 附加拦截器防止重复提交"的项目中,我们将深入探讨Struts2如何处理用户登录以及如何通过拦截器来防止重复提交的问题。 首先,我们来理解一下Struts2的核心概念。Struts2框架基于...

    Struts2解决表单重复提交

    在Web应用中,表单重复...开发者在使用时需要注意配置token相关标签和拦截器,并通过设置正确的结果视图跳转类型来防止因刷新页面导致的重复提交。通过这些方法的合理应用,可以有效地提高Web应用的健壮性和用户体验。

    用struts使用Token机制来实现防重复提交

    当用户提交表单时,Struts2的Token拦截器会自动检查Token的有效性。如果Token已经使用过或者不存在于session中,那么`isTokenValid()`会返回`false`,此时可以抛出异常或者返回一个错误页面,提示用户重新尝试。 6...

    Struts之Token解决表单那重复提交

    在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,因为它会将Token存储在会话中,而不仅仅是请求中。 2....

Global site tag (gtag.js) - Google Analytics