使用token标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。 
token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行

struts.xml中配置

<action name="userRegister" class="UserRegisterAction"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="token" /> <result name="invalid.token"> /jsp/service/power/login.jsp </result> <result name="success"> /jsp/service/power/login.jsp </result> <result name="fail"> /jsp/service/user/userRegister.jsp </result> </action>

使用<s:token>得到控制台提示信息:"Could not find token name in params“,后来发现原来是把<s:token>标签放在了<form>标签外面,导致出现以上问题。

<s:token>标签使用很简单,用以避免表单的重复提交,其原理是用户访问页面时,服务器产生一个令牌值一起发送给客户端。当这个页面被提交时,比较客户端和已经保存先前的令牌值,如果相等则清除令牌值,不相等表明表单已被提交,同时产生一个新令牌值,保存到session中。

step 1:在<form>标签里面定义标签<s:token/>

step 2:在struts.xml文件内配置token拦截器

<interceptor-ref name="token">

<param name="excludeMethods">....</param> //这里可以配置token拦截器的排队方法

</interceptor-ref>

<result name=“invaild.token">/***.jsp</result>

step 3:可在页面中添加<s:actionerror>显示重复提交信息

step 4:测试。提交页面后,单击刷新,就自动转到***.jsp

token 是在上一个action的执行方法后 会产生一个新的token放在session中 key 为“struts.token”  <s:token></s:token> 现实再页面的时候会生成俩个隐藏标签 一个叫struts.token.name  一个叫做是你struts.token.name  值作为name的隐藏标签,

提交到后台进行token 比对 不一样返回invaild.token

注:

1. 当使用token拦截器时,必须设置invalid.token的result,而使用tokenSession时,则不需要。

2. 使用token拦截器时,必须使用<s:token>标签,而且该标签必须包含在Form中。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我在使用struts2 token的过程中,遇到了一个问题,用了很长时间才解决,特记录一下。

使用struts2 的 token,我的form表单不能实例化,为null ,

有个论坛上说的是使用<s:form>表单,修改后没有任何变化。

最后在http://hi.baidu.com/miatrzofgvcgjor/item/29d6ae07b93771c72e4c6b80上找到了解决方案。

如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):

<interceptor-ref name="checkbox">
<param name="uncheckedValue">0</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
(必须加,否则出错)

我的Action配置如下,

<action name="lossRateAction!*"
   class="com.oarage.lossanalyse.exchange.action.LossRateAction"
   method="{1}">
   <interceptor-ref name="token">
    <param name="includeMethods">addLossRate</param>
   </interceptor-ref>
   <interceptor-ref name="defaultStack"/>
   <result name="list">
    /framepages/lossRate/LossRateList.jsp
   </result>
   <result name="initAddLossRate">
    /framepages/lossRate/LossRateAdd.jsp
   </result>
   <result name="initUpdateLossRate">
    /framepages/lossRate/LossRateUpdate.jsp
   </result>
  </action>

这样就可以正常使用了。记住,一定要添加上默认的拦截器。

struts2 token 使用说明的更多相关文章

  1. Struts2 token禁止重复提交表单

    如果服务器响应慢的情况下,用户会重复提交多个表单,这时候有两种设计思想: 1.在客户端使用JS技术,禁止客户重复提交表单.但是这样会使一些不使用浏览器方式登陆的人比如使用底层通信来攻击你的服务器 2. ...

  2. struts2 token 防止表单重复提交

    1.jsp页面  输入框,提交按钮 <%@ page language="java" contentType="text/html" pageEncodi ...

  3. Struts2注解使用说明

    Struts2注解 1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包, ...

  4. struts2防止重复提交的标签

    struts2 token 使用说明 --------------------------------------------------------------------------------- ...

  5. struts2笔记(3)

    关于回显: 如果是int型,默认就会回显为0,如果不想让回显,则Integer就好 //**************************************声明式验证************* ...

  6. struts2 文件的上传下载 表单的重复提交 自定义拦截器

    文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...

  7. Strut2 采用token机制防御CSRF同时也可以防止表单重复提交

    一 未配置Struts2 token的情况下测试 1.从表单提交数据,可以从下图看出,快速点击保存按钮,请求提交了两次 2.检查post提交的数据中未含有token参数 3.查看数据列表,有重复数据 ...

  8. Struts2初学习记录

    以下笔记内容来自尚硅谷_Struts2_佟刚老师的视频教程+自己一点点整理 来源免责声明 一. 1. VS 自实现: 1). 搭建 Struts2 的开发环境 2). 不需要显式的定义 Filter, ...

  9. Struts2中解决表单重复提交

    3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下:  >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...

随机推荐

  1. HTML5/CSS3(PrefixFree.js) 3D文字特效

    之前在园子里看到一个HTML5/CSS3的文字特效(这里),觉得挺好玩的所以小小的研究了下,不过发现代码都是针对webkit以及FF的所以IE跪了. Runjs 我将示例中的代码进行了精简,后来发现C ...

  2. iOS奔溃日志总结

    1,http://www.cnblogs.com/qingjoin/p/3515902.html 2,http://blog.csdn.net/u012269653/article/details/4 ...

  3. ruby学习总结05

    1.数值类(Numeric) 有理数:Rational(分子,分母) 复数:Complex(实数,虚数) 随机数:Rnadom   rand()  返回比1小的浮点数,rand(种子数)  返回0到该 ...

  4. 如何在Ubuntu/CentOS上安装Linux内核4.0

    大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为‘Hurr durr I'm a sheep’的Linux内核4.0是目前为止最新的主干内核.它是稳定版3. ...

  5. 《微信开发日志》之OAuth2验证接口

    OAuth2接口说明: 企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取员工的身份信息. 通过此接口获取用户身份会有一定的时间开销.对于频繁获取用户身份 ...

  6. Music Player团队项目(一)

    团队成员及分工 团队: Blue 团队共有六人 姓名:     学号后四位:       贡献分: 张   宇(队长)  1152          1+1.8=2.8分 侯贺琦          1 ...

  7. Native SQL

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. HNOI2006-公路修建问题(二分答案+并查集)

    公路修建问题 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨 ...

  9. Webbrowser控件判断网页加载完毕的简单方法 (转)

    摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,W ...

  10. 小型网站如何防范DDoS攻击

    ddos(Distributed Denial of Service,分布式拒绝服务攻击),俗称洪水攻击.是在传统的DoS攻击基础之上产生的新的破坏力更强的攻击方式.分布式拒绝服务攻击是指借助于客户/ ...