struts2 token 使用说明
使用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 使用说明的更多相关文章
- Struts2 token禁止重复提交表单
如果服务器响应慢的情况下,用户会重复提交多个表单,这时候有两种设计思想: 1.在客户端使用JS技术,禁止客户重复提交表单.但是这样会使一些不使用浏览器方式登陆的人比如使用底层通信来攻击你的服务器 2. ...
- struts2 token 防止表单重复提交
1.jsp页面 输入框,提交按钮 <%@ page language="java" contentType="text/html" pageEncodi ...
- Struts2注解使用说明
Struts2注解 1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包, ...
- struts2防止重复提交的标签
struts2 token 使用说明 --------------------------------------------------------------------------------- ...
- struts2笔记(3)
关于回显: 如果是int型,默认就会回显为0,如果不想让回显,则Integer就好 //**************************************声明式验证************* ...
- struts2 文件的上传下载 表单的重复提交 自定义拦截器
文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...
- Strut2 采用token机制防御CSRF同时也可以防止表单重复提交
一 未配置Struts2 token的情况下测试 1.从表单提交数据,可以从下图看出,快速点击保存按钮,请求提交了两次 2.检查post提交的数据中未含有token参数 3.查看数据列表,有重复数据 ...
- Struts2初学习记录
以下笔记内容来自尚硅谷_Struts2_佟刚老师的视频教程+自己一点点整理 来源免责声明 一. 1. VS 自实现: 1). 搭建 Struts2 的开发环境 2). 不需要显式的定义 Filter, ...
- Struts2中解决表单重复提交
3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下: >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...
随机推荐
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- linux unzip命令
zip文件是一种常用的压缩文件格式,WinZip.WinRar等压缩软件都支持zip文件格式,就连java的jar包也是zip格式的,Firefox插件xpi文件也是zip格式的.Linux在zi ...
- 模块mod_h323的编译
去h.323plus官网上下载关联的库 http://www.h323plus.org/source/ 很贴心,分操作系统下载,而且关联的ptlib库的版本也一并列了出来. 一.编译ptlib库 ex ...
- linux远程XP
众所周知XP下有"远程桌面连接"用来远程登录桌面,设置也非常简单. 那有没有什么办法在linux下远程登录到XP呢?有.用rdesktop这个linux下的软件就能实现. 发现新立 ...
- css3 3d学习笔记
几个属性: -webkit-perspective:0;景深(默认0), -webkit-perspective-origin:center center;景深基点(默认中间), -webkit-tr ...
- git学习笔记05-从远程库克隆
现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫gitskills: 我们勾选Initialize this reposit ...
- C#泛型专题系列文章目录导航
[C#泛型系列文章] 目录导航 第一部分:O'Reilly 出版的<C# Cookbook>泛型部分翻译 第一回:理解泛型 第二回:获取泛型类型和使用相应的泛型版本替换ArrayList ...
- equals()和hashcode()
默认调用的情况: 1.集合在存放对象时,首先判断hashcode(),再判断equals如果都是true,认为是相同的两个元素不进行存储. 删除对象时,将从hashcode指定位置查找再删除 2.在h ...
- 子div用了float浮动之后,如何撑开父元素,让父元素div自动适应高度的问题
方法一: html: <div id="all1"> <div id="left1">1</div> <div id= ...
- poj1066Treasure Hunt(线段相交)
链接 很纠结的找到了所有线段的中点,又很纠结的找到了哪些中点可以直接相连,最后bfs一下求出了最短路.. #include <iostream> #include<cstdio> ...