【struts2八】利用token防止表单重复提交
2015-07-16 10:27
573 查看
token:记号,令牌!
防止表单重复提交的原理:每次提交数据的时候,都额外提交一个随机的id,服务器保存id在session中,并与提交过来的id进行比较,若相同则表明是重复提交!
1、在要提交的表单的jsp页面上:加上
<s:token></s:token>
testToken.jsp:
2、因为在struts2内部有相应的拦截器,但是不在defaultStack中,所以在配置文件中引入
<interceptor-ref name="token">
//只针对token方法起作用,如果要想使用多个方法进行防治表单的提交,用逗号隔开
<param name="includeMethods">token</param>
</interceptor-ref>
struts-token.xml:
TokenAction.java:
3、在struts2的配置文件中:
<result name="invalid.token"></result>
如果出现表单的重复提交的情况,这个时候result元素中name属性的值必须是invalid.token,转到提示表单重复提交的页面
!
4、在提示错误信息的页面中,只需要加入:<s:actionerror/>
error.jsp:
错误提示为中文解决方法:
5、在struts的配置文件中,引入自己创建的资源文件
<constant name="struts.custom.i18n.resources" value="cn.itheima03.struts2.resource.token"></constant>
(1)、struts.custom.i18n.resources 自定义的资源文件
(2)、value值为自定义资源文件的路径
6、在资源文件中:key值是固定struts.messages.invalid.token,value值为最终显示的错误信息
防止表单重复提交的原理:每次提交数据的时候,都额外提交一个随机的id,服务器保存id在session中,并与提交过来的id进行比较,若相同则表明是重复提交!
1、在要提交的表单的jsp页面上:加上
<s:token></s:token>
testToken.jsp:
[align=left]<%@ page language="java" import= "java.util.*" pageEncoding="UTF-8" %>[/align] [align=left]<%@ taglib uri="/struts-tags" prefix= "s"%>[/align] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> [align=left]<html>[/align] [align=left] <body >[/align] [align=left] <s:form action= "../tokenAction_token.action" >[/align] <s:token></ s:token><!-- 用来生成隐藏的一个值提交给服务器 --> [align=left] 用户名: <s:textfield name="username" ></s:textfield> [/align] [align=left] 密码: <s:password name="password" ></s:password>[/align] [align=left] <s:submit></ s:submit>[/align] [align=left] </s:form>[/align] [align=left] </body >[/align] [align=left]</html>[/align] |
2、因为在struts2内部有相应的拦截器,但是不在defaultStack中,所以在配置文件中引入
<interceptor-ref name="token">
//只针对token方法起作用,如果要想使用多个方法进行防治表单的提交,用逗号隔开
<param name="includeMethods">token</param>
</interceptor-ref>
struts-token.xml:
[align=left]<?xml version= "1.0" encoding ="UTF-8" ?>[/align] <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" [align=left] "http://struts.apache.org/dtds/struts-2.0.dtd">[/align] [align=left]<struts>[/align] [align=left] <package name="token" namespace="/" extends="struts-default" >[/align] [align=left] <interceptors>[/align] [align=left] <interceptor-stack name= "tokenInterceptor">[/align] [align=left] <interceptor-ref name= "token">[/align] [align=left] <param name="includeMethods" >token </param>[/align] [align=left] </interceptor-ref>[/align] [align=left] <interceptor-ref name="defaultStack" ></interceptor-ref>[/align] [align=left] </interceptor-stack>[/align] [align=left] </interceptors>[/align] [align=left] [/align] [align=left] <default-interceptor-ref name="tokenInterceptor" ></default-interceptor-ref>[/align] [align=left] <action name= "tokenAction_*" method ="{1}" class="cn.itheima03.struts2.token.action.TokenAction" >[/align] [align=left] <result name="token" >token/token.jsp </result>[/align] [align=left] <result name="invalid.token" >token/error.jsp </result>[/align] [align=left] </action>[/align] [align=left] </package >[/align] [align=left]</struts>[/align] |
[align=left]public class TokenAction extends ActionSupport{[/align] [align=left] //定义与表单name 属性同名字段来接收表单提交的数据[/align] [align=left] String username=null;[/align] [align=left] String password=null;[/align] [align=left] [/align] public String getUsername() { [align=left] return username ;[/align] [align=left] }[/align] public void setUsername(String username) { this.username = username; [align=left] }[/align] [align=left] [/align] public String getPassword() { [align=left] return password ;[/align] [align=left] }[/align] [align=left] [/align] public void setPassword(String password) { this.password = password; [align=left] }[/align] [align=left] [/align] [align=left] [/align] public String token(){ [align=left] return "token" ;[/align] [align=left] }[/align] [align=left]}[/align] |
<result name="invalid.token"></result>
如果出现表单的重复提交的情况,这个时候result元素中name属性的值必须是invalid.token,转到提示表单重复提交的页面
!
4、在提示错误信息的页面中,只需要加入:<s:actionerror/>
error.jsp:
[align=left]<%@ page language="java" import= "java.util.*" pageEncoding="UTF-8" %>[/align] [align=left]<%@ taglib uri="/struts-tags" prefix= "s"%>[/align] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> [align=left]<html>[/align] [align=left] <body >[/align] [align=left] <%-- <s:fielderror></s:fielderror>--%>[/align] [align=left] <s:actionerror />[/align] [align=left] </body >[/align] [align=left]</html>[/align] |
错误提示为中文解决方法:
5、在struts的配置文件中,引入自己创建的资源文件
<constant name="struts.custom.i18n.resources" value="cn.itheima03.struts2.resource.token"></constant>
(1)、struts.custom.i18n.resources 自定义的资源文件
(2)、value值为自定义资源文件的路径
6、在资源文件中:key值是固定struts.messages.invalid.token,value值为最终显示的错误信息
相关文章推荐
- JQuery+Strusts1.x无刷新登录
- 插件管理框架 for Delphi(一)
- 使用CSS框架布局的缺点和优点小结
- 列举PHP的Yii 2框架的开发优势
- Windows窗体的.Net框架绘图技术实现方法
- 浅谈JavaScript 框架分类
- JS刷新框架外页面七种实现代码
- 超赞的动手创建JavaScript框架的详细教程
- asp.net4.0框架下验证机制失效的原因及处理办法
- struts2 jquery 打造无限层次的树
- 插件管理框架 for Delphi(二)
- 零基础学习AJAX之AJAX框架
- Ajax 框架学习笔记
- ajax交互Struts2的action(客户端/服务器端)
- Flex中最好的MVC框架Mate框架
- java struts常见错误以及原因分析
- JavaScript 异步调用框架 (Part 4 - 链式调用)
- JavaScript 异步调用框架 (Part 2 - 用例设计)
- struts2 spring整合fieldError问题
- Struts2的s:radio标签使用及用jquery添加change事件