今天新开了服务,需要用到拦截器,好久没看spring的东西了,好多东西都忘了。。。这个项目框架是另一个同事搭建的,我需要创建一个拦击器处理鉴权问题,但是不好使然后具体查了下原因。
在网上找了下,大致有这么几种情况:
缺少注解:@Component或者@Configuration注解
启动类没有扫描到:@ComponentScan没扫描到
路径配置错了:addPathPatterns(“/**”);// /**代表所有目录;/*代表当前目录
然并软,我没有上面的问题。。。搞了好几个小时跟着源码发现另一个拦截器竟然起作用了!!!看了下另一个Config拦截器继承了WebMvcConfigurationSupport
springboot只会生效一个配置类,于是我将两个Config配置类合成一个,然后可以啦!
值得注意的是,我将WebConfig里的WebMvcConfigurationSupport改成WebMvcConfigurer或者WebMvcConfigurerAdapter也是不行的。
所以说,项目中不能有两个以上的类继承自这三个类。在重写addInterceptors后注意你的代码里面有没有其他地方继承或实现了WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer。
一定要统一,不能是有的类继承这个,有的类继承那个!!!
继承WebMvcConfigurerAdapter或实现WebMvcConfigurer,功能差不多,可以在Application类中继承或实现,也可以在其他的地方。重写的方法都会执行。
继承WebMvcConfigurationSupport,若多个类继承该类,只会有一个类中的重写的方法执行!!!
优先级:与Application平级>其他路径下的类,优先级高的类执行后,其他类不会执行。注意,不能在Application类中继承,即使继承了,重写的方法也不会生效。