Struts2标签之token防止表单重复提交

本文介绍Struts2中如何使用token标签防止表单重复提交。通过生成唯一GUID放入session和form中,利用token拦截器验证一致性来实现。配置包含国际化资源及自定义错误消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=medium][color=blue]Struts2的token标签防止表单重复提交的思路是这样的:[/color]
1、当请求到标有<s:token/>标签的JSP的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中,这个GUID就是这个hidden的值。
2、在struts.xml文件里配置好的token拦截器会判断客户端form提交的token和session中保存的session是否相等。如果equals=true则执行Action。否则拦截器给值栈中压入actionError对象并设置其属性invaid.token的值,最后返回invaid.token结果,Action对应的方法也不会执行,这个时候在action的result里面配置该类型的结果跳转视图,并在值栈中的ActionError里找到invaid.token在国际化资源对应的值并输出,默认是一串英文(The form has already been processed or no token was supplied, please try again),也可以自行设置。[/size]



<s:form name="tag-form" action="tag-form" method="post">

<s:token />
<s:elseif test="getActionErrors()">
<s:actionerror/>
</s:elseif>

<s:textfield name="userName" label="用户名"></s:textfield><br/>
<s:password name="password" label="密码"></s:password><br/>
<s:submit />

</s:form>



struts.messages.invalid.token=请不要重复提交表单



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="messages"/>

<package name="main" extends="struts-default">
<action name="tag-form" class="com.chou.web.TagAction" method="submit">
<interceptor-ref name="token">
<param name="includeMethods">submit</param>
</interceptor-ref>
<interceptor-ref name="paramsPrepareParamsStack"/>
<result>tag.jsp</result>
<result name="invalid.token">tag.jsp</result>
</action>
</package>
</struts>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值