创建TokenForm注解,标记需要防重提交页面(VIEw) import java.lang.annotation.documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @documented public @interface TokenForm { //如果create为true,表示是一个跳转到增加页面的请求 //boolean create() default false; //如果是remove为true,表示是一个增加提交的请求 boolean remove() default false; }
|
创建拦截器 import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.servlet.http.httpServletRequest; import javax.servlet.http.httpServletResponse; import javax.servlet.http.httpSession; import org.chu.annotation.TokenForm; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.ModelAndVIEw; public class TokenInterceptor implements handlerinterceptor { @OverrIDe public boolean preHandle(httpServletRequest request,httpServletResponse response,Object handler) throws Exception { //第一步:如果是一个增加页面的请求,就创建一个Token List<String> tokenPool=null; HandlerMethod hm = (HandlerMethod) handler; TokenForm tokenForm = hm.getmethodAnnotation(TokenForm.class); if(tokenForm!=null) { httpSession session = request.getSession(); if(session.getAttribute("tokenPool")==null) { tokenPool = new ArrayList<>(); }else { tokenPool=(List<String>) session.getAttribute("tokenPool"); } String sessionToken = UUID.randomUUID().toString(); tokenPool.add(sessionToken); session.setAttribute("sessionToken",sessionToken); session.setAttribute("tokenPool",tokenPool); if(tokenForm.remove()) { String formToken = request.getParameter("formToken"); List<String> resultTokenPool = (List<String>) session.getAttribute("tokenPool"); boolean flag = false; for (String token : resultTokenPool) { if(token.equals(formToken)) { resultTokenPool.remove(token); flag = true; break; } } if(flag==false) { response.sendRedirect(request.getParameter("token.invoke")); return false; } } } return true; } @OverrIDe public voID postHandle(httpServletRequest request,Object handler, ModelAndVIEw modelAndVIEw) throws Exception { // Todo auto-generated method stub } @OverrIDe @H_369_419@
|
在配置文件(config)中加入拦截器 @OverrIDe public voID addInterceptors(InterceptorRegistry registry) { TokenInterceptor tokenInterceptor = new TokenInterceptor(); registry.addInterceptor(tokenInterceptor ) .addpathPatterns("/**") .excludePathPatterns("/user/login") .excludePathPatterns("/user/undo"); } |
以上是内存溢出为你收集整理的Web提交页面防重提交请求全部内容,希望文章能够帮你解决Web提交页面防重提交请求所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)