Web提交页面防重提交请求

Web提交页面防重提交请求,第1张

概述创建TokenForm注解,标记需要防重提交页面(View) package org.chu.annotation;   import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.l
创建TokenForm注解,标记需要防重提交页面(VIEw)

package org.chu.annotation;
 
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;
       
}

 

 

 

创建拦截器
package org.chu.interceptor;
 
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
            //问题:如何标志请求的方法是一个增加的方法呢?通过注解标识
            //HandlerMethod对象可以获得请求准备要调用的方法的方法信息

           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@
@H_369_419@  @H_369_419@public voID afterCompletion(httpServletRequest request,@H_369_419@
@H_369_419@              @H_369_419@Exception ex) throws Exception { @H_369_419@

@H_369_419@        @H_369_419@// Todo auto-generated method stub @H_369_419@
@H_369_419@  @H_369_419@} @H_369_419@
}@H_369_419@@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提交页面防重提交请求所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1056826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存