您的位置:首页 > 编程语言 > Java开发

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

2012-03-02 21:34 387 查看
>======================================================<
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;
}
}
>======================================================<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: