token
为了防止重复提交数据,可以使用token标签,使用token标签之后,会自动生成一个hidden的GUID,提交的时候会将GUID保存到session中,然后根据提交的GUID和保存的GUID,判断是否是同一个 GUID,从而确定是否是同一次提交。如果是的话就返回一个invalid.token的逻辑视图,所以也需要配置invalid.token的物理视图。
<input type="hidden" name="struts.token.name" value="token" />
<input type="hidden" name="token" value="M31Z4E9EQ04UR8MRUTB3MU9X5VCO1SS1" />
上述代码就是程序自动添加的hidden,由上也就可知,自定义名字时要避免上述的名字
使用
1、为了使用token,需要在页面中引入标签<s:token/>
2、添加token拦截器(为包指定token或者为action指定token)
<!--为 Action 启用 token-->
<package name="login" extends="struts-default">
<action name="Login" class="org.struts2.action.Login">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token"/>
<result name="invalid.token">/WEB-INF/content/wrong.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
</action>
</package>
<!--为包启用 token-->
<package name="lee" extends="struts-default">
<interceptors>
<interceptor-stack name="myStack">
<interceptor-ref name="token"/>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack" />
<action name="page1" class="org.bruce.Page1">
<result>/page1.jsp</result>
<result name="invalid.token">/page1error.jsp</result>
</action>
</package>
3、配置invalid.token的物理视图
实例
1、jsp页面添加<s:token/>
<s:form action="Login" >
<s:token name="token"/>
<s:textfield name="user.name" label="姓名"/>
<s:textfield name="user.password" label="密码"/>
<s:submit />
</s:form>
2、配置token拦截器和invalid.token的物理视图
<package name="login" extends="struts-default">
<action name="Login" class="org.struts2.action.Login">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token"/>
<result name="invalid.token">/WEB-INF/content/wrong.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
</action>
</package>
时间: 2024-11-05 12:20:22