zoukankan      html  css  js  c++  java
  • struts2利用token机制拦截用户重复提交

    一、引起重复提交的原因


     

    1. 服务器处理慢,用户手动再次点击了提交相关的按钮

    2. 提交成功后,用户因为某些原因进行刷新操作

    二、防止重复提交的方法


     

    1. 表单提交方法应该设置为method="post" 这样用户刷新时,浏览器会提示用户是否再次提交(method="get"则不会)

    2. 在表单数据提交后,程序处理应该使用重定向页面,这样刷新也重复提交不了数据了

    3. 使用struts2的token机制来拦截重复提交

      (1) 页面form表单内增加代码:<s:token></s:token><s:token/>
      (2) 在struts.xml配置文件的<package>中配置拦截器

    拦截器配置
     1 <interceptors>
     2     <!-- 声明需要的拦截器,可声明多个 -->
     3     <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
     4     <interceptor name="..." class="..."/>
     5 
     6     <!-- 自定义拦截器配置 -->
     7     <interceptor-stack name="myStack">
     8         <!-- 将声明的拦截器加入队列,可加入多个 -->
     9         <interceptor-ref name="alias" />
    10         <interceptor-ref name="..."/>
    11         <!--必需引用这个,否则点下一个子ACTION会报错-->
    12         <interceptor-ref name="defaultStack" />
    13     </interceptor-stack>
    14 </interceptors>

      (3) 在struts.xml配置文件的<action>中加入拦截器并配置异常处理页面(这是配置给某一个action)

    拦截器加入action
    1 <!-- 配制拦截后跳转的页面 -->  
    2 <result name="invalid.token">/invalidToken.jsp</result>  
    3 <result name="exception">/error.jsp</result>
    4 
    5 <!-- 配制定义的拦截器 -->
    6 <interceptor-ref name ="myStack"/>
    7 
    8 <!-- 配制异常信息处理,指Action抛出Exception异常时,转入名为exception的结果页面 -->
    9 <exception-mapping result="exception" exception="Exception" />

      

      或可以配置全局action的拦截器,在struts.xml配置文件的<package>中加入全局配置

    全局配置拦截器
     1 <!-- 配置默认的拦截器 -->
     2 <default-interceptor-ref name="myStack"/>
     3 
     4 <global-results>
     5     <!-- 下面定义的结果对所有的Action都有效 -->
     6     <result name="exception">/error.jsp</result>
     7     <result name="invalid.token">/invalidToken.jsp</result>
     8 </global-results>
     9 
    10 <global-exception-mappings>
    11     <!-- 指Action抛出Exception异常时,转入名为exception的结果。 -->
    12     <exception-mapping exception="java.lang.Exception" result="exception" />
    13 </global-exception-mappings>
    ★不是每一次努力都会有收获,但是每一次收获都必须努力,这是一个不公平的不可逆转的命题★
  • 相关阅读:
    Exchange 2016与国内版O365混合部署(1):过程总览
    Office365与本地Exchange混合部署之邮件流介绍详情
    清理Exchange 2013和2016的Log文件(精华)
    Exchange2016日志路径
    C:/inetpub/logs/logfile/路径详解
    使用VMwareVCenterConverter迁移到虚拟机(p2v)
    WindowsServer安全基线
    利用WSUS部署更新程序
    Storefront与NetScaler的集成配置
    运维技巧(13):Exchange证书申请导入
  • 原文地址:https://www.cnblogs.com/lishaofei/p/2938877.html
Copyright © 2011-2022 走看看