<s:token/>防止多次提交

防止多次提交表单,见表单:

<s:form action="formAction"> 
    <s:bean name="com.test.service.BookService" id="bs"></s:bean>
    <s:checkboxlist list="#bs.books" label="请选择喜欢的图书" name="b" listKey="author" 
listValue="name"  labelposition="top"></s:checkboxlist>
    <s:token/>
    <s:submit value="提交"/>
    </s:form>

 加入<s:token/> 还要在<action>中定义拦截器

<action name="formAction" class="com.test.action.FormAction">
			<interceptor-ref name="defaultStack"/>
			<interceptor-ref name="token"/>
			<result>success.jsp</result>
			<result name="invalid.token">/error.jsp</result>
</action>

 但拦截器判断为重复提交,则返回invalid.token,转到error.jsp

理解: 
1、JSP使用<s:token/>标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。 
2、token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行

猜你喜欢

转载自dick-d.iteye.com/blog/1620305