• Interceptor拦截器对一次请求进行多次拦截


    配置拦截器后拦截器会对一个请求进行多次拦截
    /**
     * 拦截器
     * */
    public class TokenInterceptor implements HandlerInterceptor {
    
        /*
        * 在DispatcherServlet之前执行
        * */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//从请求头内获取tokne
             String token = request.getHeader("token");
             if(verifyToken(token)){
               log.info("token验证成功");
               return true;
             }
             log.error("token验证失败");
             return false;
        }
    }
    @Configuration
    public class InterceptorConfig extends WebMvcConfigurationSupport {
    
        /**
         * springBoot2.0后配置拦截器需要extends 的 WebMvcConfigurerAdapter 已经过时,取而代之的是 WebMvcConfigurationSupport
         * WebMvcConfigurerAdapter 只是对 WebMvcCofigurer 的空实现,而WebMvcConfigurerSupport对WebMvcCofigurer的实现更全面,
         * 但是继承WebMvcConfigurerSupport之后SpringBoot的webMvc自动配置会失效,导致视图解析器无法解析并返回对应的视图,如果需要返回逻辑视图就继承WebMvcCofigurer
         *
         * WebMvcConfigurationSupport 在整个程序中只会生效一个,如果实现了WebMvcConfigurationSupport类,那么继承WebMvcConfigurer的类将不会生效
         *
         * WebMvcConfigurationSupport是重写默认配置,而WebMvcConfigurerAdapter是在默认配置的上面增加扩展
         * */
    
        @Autowired
        private BaseAPI baseAPI;
    
        @Value("${request.whitelist}")
        private String whitelist;//请求白名单//配置拦截器,拦截请求验证tokne
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            String[] whites = whitelist.split(",");
                                                                               //设置拦截的请求       //设置不拦截的请求
            registry.addInterceptor(new TokenInterceptor(baseAPI)).addPathPatterns("/**").excludePathPatterns(whites);
        }
    }

    在请求中发现当执行完毕查询后又回到了拦截器中,再次回到拦截器中时就得不到header中的tokenl了,是因为有静态资源访问导致的增加配置

    //增加判断过滤调静态资源访问,这样只有第一次请求会进入,之后的请求都不会进入了
    if (handler instanceof ResourceHttpRequestHandler){
        return true;
    }

    完整代码

    /**
     * token拦截器
     * */
    @Slf4j
    public class TokenInterceptor implements HandlerInterceptor {
    
        private BaseAPI baseAPI;
    
        /*
        * 在DispatcherServlet之前执行
        * */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     if (handler instanceof ResourceHttpRequestHandler){
              return true;
            }
            //从请求头内获取tokne
            String token = request.getHeader("token");
            if(verifyToken(token)){
               log.info("token验证成功");
               return true;
            }
            log.error("token验证失败");
            return false;
        }
    }
     

  • 相关阅读:
    团队-科学计算器-设计文档
    团队-科学计算器-开发环境搭建过程
    《个人-GIT使用方法》
    结对-结对编项目作业名称-开发环境搭建过程
    结对编程项目作业-结对编项目设计文档
    阅读笔记,构建之法
    课程总结
    -阅读提问-3
    构建之法:现代软件工程-阅读笔记
    《科学计算机——环境搭建》
  • 原文地址:https://www.cnblogs.com/HQ0422/p/14273011.html
Copyright © 2020-2023  润新知