- package com.thinkgem.jeesite.common.repeat_form_validator;
- import java.lang.reflect.Method;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.web.method.HandlerMethod;
- import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
- import com.thinkgem.jeesite.common.mapper.JsonMapper;
- /**
- * 一个用户 相同url 同时提交 相同数据 验证
- * 主要通过 session中保存到的url 和 请求参数。如果和上次相同,则是重复提交表单
- * @author Administrator
- *
- */
- public class SameUrlDataInterceptor extends HandlerInterceptorAdapter{
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- if(repeatDataValidator(request))//如果重复相同数据
- return false;
- else
- return true;
- }
- /**
- * 验证同一个url数据是否相同提交 ,相同返回true
- * @param httpServletRequest
- * @return
- */
- public boolean repeatDataValidator(HttpServletRequest httpServletRequest)
- {
- String params=JsonMapper.toJsonString(httpServletRequest.getParameterMap());
- String url=httpServletRequest.getRequestURI();
- Object preUrlParams=httpServletRequest.getSession().getAttribute(url);
- if(preUrlParams==null)//如果上一个数据为null,表示还没有访问页面
- {
- httpServletRequest.getSession().setAttribute(url, params);
- return false;
- }
- else//否则,已经访问过页面
- {
- if(preUrlParams.toString().equals(params))//如果上次url+数据和本次url+数据相同,则表示重复添加数据
- {
- return true;
- }
- else//如果上次 url+数据 和本次url加数据不同,则不是重复提交
- {
- httpServletRequest.getSession().setAttribute(url, params);
- return false;
- }
- }
- }
- }
防止数据重复,通过session保存url和请求参数来校验
最新推荐文章于 2023-03-13 15:43:48 发布