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;    }}
@Configurationpublic 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拦截器 * */@Slf4jpublic 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;    }}

来源:https://www.icode9.com/content-4-819901.html

(0)

相关推荐