struts2 token拦截器防止表单重复提交

>======================================================<
0.struts2的token是什么?
struts2的token是用来防止表达的重复提交而定制的拦截器,token只是这个拦截器的别名而已
token有很多种意思如记号,符号等都可称为token。
防止表单重复提交的实现是通过在表单中添加一个隐藏域然后在这个隐藏域中保存一个记号,这个记号是自动生成的
并且是唯一的,在第一次提交后使用httpsession验证这个记号是否在httpsession中存在,如果我们重复提交之后就能
阻止重复提交。 
->这两个是拦截器是都是仿制表单重复提交的实现
>org.apache.struts2.interceptor.TokenInterceptor
>org.apache.struts2.interceptor.TokenSessionStoreInterceptor.
<interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>
<interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>

>======================================================<
//>>必须使用struts标签才能够做到表单的重复提交验证
//<font size="10">login</font>
//  <s:form method="post" action="token/userLoginAction!login">
//  	<s:textfield name="username" value="zhangsan"></s:textfield>
//  	<s:textfield name="password" value="pwd"></s:textfield>
//
//	<!--****************************************-->
//	<!--//这个tag很重要他会在当前请求对应的session中为这个表单创建一个唯一的标示符一旦
//	提交这个值将会改变如果用没有刷新的页面去提交就会导致重复提交然后跳转到重复提交页面 -->
//  	<s:token></s:token>
//  	<!--****************************************-->
//	
//	<s:submit value="login"></s:submit>
//  </s:form>
>======================================================<

>生成的html代码
>======================================================<
  <font size="10">login</font>
  <form id="userLoginAction!login" name="userLoginAction!login" action="token/userLoginAction!login" method="post">
  	<input type="text" name="username" value="zhangsan" id="userLoginAction!login_username"/>
  	<input type="text" name="password" value="pwd" id="userLoginAction!login_password"/>
  	<input type="hidden" name="struts.token.name" value="struts.token" />
	<input type="hidden" name="struts.token" value="7Y4I0POETFZPLK4BVK45RZ7GALAL6MHR" /><!-- 对应到这次回话生成的唯一标示符-->
  	<input type="submit" id="userLoginAction!login_0" value="login"/>
>======================================================<

>action配置
>======================================================<
<package name="preventDoublePost" extends="struts-default" namespace="/token">
		<action name="userLoginAction" class="com.zyb.web.user.UserLoginAction">
			<interceptor-ref name="defaultStack"/><!-- 需要注意拦截器栈的配置顺序-->
			<interceptor-ref name="token"/><!-- 这就是用来防止表单重复提交的拦截器-->
			<result name="invalid.token">../doublePost.jsp</result><!-- 需要注意的是名字必须为invalid.token-->
			<result name="success">../fileupload_success.jsp</result>
		</action>
</package>
>======================================================<

>action代码和普通的action没什么区别还是正常使用
>======================================================<
public class UserLoginAction extends ActionSupport {
	public String login(){
		System.out.println("login successs");
		return this.SUCCESS;
	}
}
>======================================================<


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值