今天开发调试的时候发现一个问题,一些请求token过期会直接报错500, Server error, 而一些加了注解拦截的请求,依然可以在token过期的情况下成功进入到业务代码
并且在AOP切面代码中打的断点断不下来。

经过排查后,发现是没有加MvcConfigure

@Configuration
public class MvcConfigurer implements WebMvcConfigurer {

    /**
     * 不需要拦截的请求
     */
    private static List<String> execludePathList = new ArrayList<>();

    static {
        execludePathList.add("/error");
        execludePathList.add("/ops/heart");
        execludePathList.add("/ops/ready");
    }

    /**
     * 在添加拦截器之前,先创建该bean,纳入到spring中。
     *      解决拦截器中无法依赖注入的问题
     * @return
     */
    @Bean
    public UserAuthenticationInterceptor getUserAuthenticationInterceptor(){
        return new UserAuthenticationInterceptor();
    }

    /**
     * 在添加拦截器之前,先创建该bean,纳入到spring中。
     *      解决拦截器中无法依赖注入的问题
     * @return
     */
    @Bean
    public AdminAuthenticationInterceptor getAdminAuthenticationInterceptor(){
        return new AdminAuthenticationInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 用户拦截器
        registry.addInterceptor(getUserAuthenticationInterceptor()).addPathPatterns("/**").excludePathPatterns(execludePathList);
        // 管理后台拦截器
        registry.addInterceptor(getAdminAuthenticationInterceptor()).addPathPatterns("/**").excludePathPatterns(execludePathList);
    }
}

加上后,重启,不出意外的就可以了。

拦截器不生效的原因还可能有如下的情况

注解未标注齐全

@Componet
@Configuration

是否有多个配置类同时继承了WebMvcConfigurationSupport类

或实现了WebMvcConfigurer, 多个配置类只会生效前一个配置类,后一个配置类不会生效 ;
WebMvcConfigurer和WebMvcConfigurationSupport都是用来配置WebMvc的,WebMvcConfigurer只是WebMvcConfigurationSupport的一个扩展类,它并没有扩展新功能,只是为让用户更方便安全的添加自定义配置 ;
在Spring Boot 1.5版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated(弃用)
官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport,方式一实现WebMvcConfigurer接口(推荐),方式二继承WebMvcConfigurationSupport类,具体实现可看这篇文章。点击跳转外链


欢迎关注微信公众号:小生听雨园


参考文章

参考文献1
参考文献2
参考文献3

分类: java

站点统计

  • 文章总数:315 篇
  • 分类总数:20 个
  • 标签总数:193 个
  • 运行天数:1156 天
  • 访问总数:40438 人次

浙公网安备33011302000604

辽ICP备20003309号