防止数据重复,通过session保存url和请求参数来校验

来源:互联网 发布:赚钱宝映射哪些端口号 编辑:程序博客网 时间:2024/05/14 23:29
  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(repeatDataValidator(request))//如果重复相同数据                
  26.         return false;      
  27.   else                        
  28. return true;
  29.   
  30.   }  
  31.     /** 
  32.      * 验证同一个url数据是否相同提交  ,相同返回true 
  33.      * @param httpServletRequest 
  34.      * @return 
  35.      */  
  36.     public boolean repeatDataValidator(HttpServletRequest httpServletRequest)  
  37.     {  
  38.         String params=JsonMapper.toJsonString(httpServletRequest.getParameterMap());  
  39.         String url=httpServletRequest.getRequestURI();    
  40.         Object preUrlParams=httpServletRequest.getSession().getAttribute(url); 
  41.  
  42.         if(preUrlParams==null)//如果上一个数据为null,表示还没有访问页面  
  43.         {  
  44.             httpServletRequest.getSession().setAttribute(url, params);  
  45.             return false;  
  46.         }  
  47.         else//否则,已经访问过页面  
  48.         {  
  49.             if(preUrlParams.toString().equals(params))//如果上次url+数据和本次url+数据相同,则表示重复添加数据  
  50.             {  
  51.                   
  52.                 return true;  
  53.             }  
  54.             else//如果上次 url+数据 和本次url加数据不同,则不是重复提交  
  55.             {  
  56.                 httpServletRequest.getSession().setAttribute(url, params);  
  57.                 return false;  
  58.             }  
  59.               
  60.         }  
  61.     }  
  62.   
  63. }  
原创粉丝点击