truts2 防表单重复提交 <s:token/>用法

<form action="/sug!addSug.action" method="post">
      <s:token />

</form>


<s:token/> 生成如下的内容:(struts.token.name 标识哪个隐藏域存了 token 值)

         <input type="hidden" name="struts.token.name" value="struts.token"/>

        <input type="hidden" name="struts.token" value="7GXL55LPSGU19SDC9D3VP54I20XT3BVA"/>


配置token拦截器(struts.xml)

普通配置:

  1. <package name="TestStruts" extends="struts-default">  
  2.     <interceptors>  
  3.     <interceptor-stack name="myStack">  
  4. <interceptor-ref name="token">
      
              <!-- includeMethods表示包含指定的方法,即对标记为includeMethods的方法进行拦截 -->
                    <param name="includeMethods">saveCinema,saveCinemaAndtoAddScreen,updateCinema</param>
      
              <!--  定义被排除的方法名,也就是你action中不被这个拦截器拦截的方法名  -->
      
                 <param name="excludeMethods"></param>
       
              -->
                </interceptor-ref> 
  5.         <interceptor-ref name="token-session"/>  
  6.        <interceptor-ref name="defaultStack" />               
  7.     </interceptor-stack>  
  8.     </interceptors>  
  9.     <default-interceptor-ref name="myStack" />  
  10.     <action name="Login" class="com.unmi.struts2.action.LoginAction">  
  11.         <result name="input">/login.jsp</result>  
  12.         <result name="invalid.token">/exception.jsp</result>  
  13.     </action>  

零配置:

@ParentPackage(value="default")
@Namespace("/")
@Action(value = "sug",interceptorRefs={@InterceptorRef("token"),@InterceptorRef("defaultStack")},results={
@Result(name = "about", location = "/WEB-INF/page/proscenium/about.jsp"),
@Result(name = "invalid.token", location = "/WEB-INF/page/systemPage/error.jsp"),
})


注意 token、token-session 和 defaultStack 的顺序要保证,还需要加上名为 "invalid.token" 的 result,当发现重复提交时转向到这个逻辑页,如 /exception.jsp,在 /exception.jsp 加上 <s:actionerror /> 在出现重复提交时就会提示:The form has already been processed or no token was supplied, please try again.


) 为包启用 token 和 token-session

  1. <packagename="TestStruts" extends="struts-default">  
  2.     <interceptors>  
  3.     <interceptor-stackname="myStack">  
  4.         <interceptor-refname="token"/>  
  5.         <interceptor-refname="token-session"/>  
  6.     <interceptor-refname="defaultStack" />              
  7.     </interceptor-stack>  
  8.     </interceptors>  
  9.     <default-interceptor-refname="myStack" />  
  10.     <actionname="Login" class="com.unmi.struts2.action.LoginAction">  
  11.         <resultname="input">/login.jsp</result>  
  12.         <resultname="invalid.token">/exception.jsp</result>  
  13.     </action>  
  14. ............................................................................ 

2) 为 Action 启用 token 和 token-session

  1. <actionname="Login" class="com.unmi.struts2.action.LoginAction">  
  2.     <interceptor-refname="token" />  
  3.     <interceptor-refname="token-session" />  
  4.     <interceptor-refname="defaultStack" />  
  5.     <resultname="input">/login.jsp</result>  
  6.     <resultname="invalid.token">/exception.jsp</result>  
  7. </action> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值