springmvc 防止重复提交

http://blog.csdn.net/u013378306/article/details/52944780



第二种方法(判断请求url和数据是否和上一次相同)

推荐,非常简单,页面不需要任何传入,只需要在验证的controller方法上写上自定义注解即可

写好自定义注解

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.thinkgem.jeesite.common.repeat_form_validator;  
  2.   
  3. import java.lang.annotation.ElementType;  
  4. import java.lang.annotation.Retention;  
  5. import java.lang.annotation.RetentionPolicy;  
  6. import java.lang.annotation.Target;  
  7.   
  8. /** 
  9.  * 一个用户 相同url 同时提交 相同数据 验证 
  10.  * @author Administrator 
  11.  * 
  12.  */  
  13. @Target(ElementType.METHOD)  
  14. @Retention(RetentionPolicy.RUNTIME)  
  15. public @interface SameUrlData {  
  16.   
  17.       
  18. }  


写好拦截器

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.thinkgem.jeesite.common.repeat_form_validator;  
  2.   
  3. import java.lang.reflect.Method;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. import org.springframework.web.method.HandlerMethod;  
  11. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;  
  12.   
  13. import com.thinkgem.jeesite.common.mapper.JsonMapper;  
  14.   
  15. /** 
  16.  * 一个用户 相同url 同时提交 相同数据 验证 
  17.  * 主要通过 session中保存到的url 和 请求参数。如果和上次相同,则是重复提交表单 
  18.  * @author Administrator 
  19.  * 
  20.  */  
  21. public class SameUrlDataInterceptor  extends HandlerInterceptorAdapter{  
  22.       
  23.       @Override  
  24.         public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
  25.             if (handler instanceof HandlerMethod) {  
  26.                 HandlerMethod handlerMethod = (HandlerMethod) handler;  
  27.                 Method method = handlerMethod.getMethod();  
  28.                 SameUrlData annotation = method.getAnnotation(SameUrlData.class);  
  29.                 if (annotation != null) {  
  30.                     if(repeatDataValidator(request))//如果重复相同数据  
  31.                         return false;  
  32.                     else   
  33.                         return true;  
  34.                 }  
  35.                 return true;  
  36.             } else {  
  37.                 return super.preHandle(request, response, handler);  
  38.             }  
  39.         }  
  40.     /** 
  41.      * 验证同一个url数据是否相同提交  ,相同返回true 
  42.      * @param httpServletRequest 
  43.      * @return 
  44.      */  
  45.     public boolean repeatDataValidator(HttpServletRequest httpServletRequest)  
  46.     {  
  47.         String params=JsonMapper.toJsonString(httpServletRequest.getParameterMap());  
  48.         String url=httpServletRequest.getRequestURI();  
  49.         Map<String,String> map=new HashMap<String,String>();  
  50.         map.put(url, params);  
  51.         String nowUrlParams=map.toString();//  
  52.           
  53.         Object preUrlParams=httpServletRequest.getSession().getAttribute("repeatData");  
  54.         if(preUrlParams==null)//如果上一个数据为null,表示还没有访问页面  
  55.         {  
  56.             httpServletRequest.getSession().setAttribute("repeatData", nowUrlParams);  
  57.             return false;  
  58.         }  
  59.         else//否则,已经访问过页面  
  60.         {  
  61.             if(preUrlParams.toString().equals(nowUrlParams))//如果上次url+数据和本次url+数据相同,则表示城府添加数据  
  62.             {  
  63.                   
  64.                 return true;  
  65.             }  
  66.             else//如果上次 url+数据 和本次url加数据不同,则不是重复提交  
  67.             {  
  68.                 httpServletRequest.getSession().setAttribute("repeatData", nowUrlParams);  
  69.                 return false;  
  70.             }  
  71.               
  72.         }  
  73.     }  
  74.   
  75. }  


配置spring mvc

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <mvc:interceptor>  
  2.            <mvc:mapping path="/**"/>  
  3.            <bean class="com.thinkgem.jeesite.common.repeat_form_validator.SameUrlDataInterceptor"/>  
  4.        </mvc:interceptor>  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值