阻止重复提交? struts2 的 token 这么搞绝对没问题!
2015-12-08 13:10
591 查看
虽然struts2的标签用起来不是很方便不过 <s:token/>这个标签要我们自己来实现的话真的不太容易!!!
struts2 token 使用说明-------------------------------------------------------------------------------------------------------------------
使用token标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。
token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行
1.首先我们在jsp页面上导入struts标签库
<%@ taglib uri="/struts-tags" prefix="s" %>
2.在表单中添加<s:token/>标签
<form action="user/login" method="get">
用户名:<input name="username"><br>
密码:<input name="password"><br>
<s:token></s:token>
<input type="submit" value="登录">
</form>
3.添加了<s:token/>的表单在服务器返回之后会被添加一个隐藏域用于存储token这个令牌
<form action="" method="post"> 用户ID:<input name="user.id"> 姓名:<input name="user.name"> <input type="hidden" name="struts.token.name" value="token" /> <input type="hidden" name="token" value="11R5FX3JFC3QB2QUQ0M717U2A2RUCI66" /> <script type="text/javascript">
4.在struts.xml中配置token的拦截
<action name="login" class="com.xiangzi.action.UserAction">
<result name="success">/ok.jsp</result>
<interceptor-ref name="defaultStack" ></interceptor-ref>
<interceptor-ref name="token" ></interceptor-ref>
<result name="invalid.token">/error.jsp</result>
</action>
注意:1.这里需要些两个拦截器,默认的defaultStack要在上面,token在下面,为了能是所有拦截器有效
2.这个 <action>映射的action.class是需要继承ActionSupport这个类的,不然struts识别不了
3.要在这个
<action>
中配置一个 name="incalid.token" 的result结果,作为拦截之后的跳转
5.就是这么简单!
相关文章推荐
- 转 Java synchronized详解
- 导入连连支付demo到myeclipse10的三个问题
- eclipse在编写代码时字体突然改变了怎么变回来
- javaWeb 复习系列(四)---- 多个请求映射到同一个 Servlet
- java socket编程之聊天室(三)
- 剔除java反编译文件后的无效注释信息
- 【JAVA高级】——myEclipse连接mysql启动数据库服务
- Java基础知识强化之集合框架笔记75:哈希表
- 利用Maven创建基于原型项目的Java REST项目
- java面向对象-封装
- javaWeb 实现上传+下载 文件
- JAVA 修饰符
- java 客户端调用 .net webservice 添加
- java jdbc使用SSH隧道连接mysql数据库demo
- Java Concurrent并发库实例
- SSH
- java keytool 自签证书
- Java注解初学入门
- 浅谈java.util.concurrent包的并发处理
- Maven搭建SpringMVC+Hibernate项目详解