拦截器中无法注入Mapper、Service
写登录认证拦截器的时候碰到一个小问题:在拦截器中如果没有用到mapper、service时,一切正常;但是一旦用到mapper、service,就报
空指针异常
,一开始以为是没有查到数据(事实上没查到和查不了是两回事~~只是简单没查到的话也应该返回一个空对象),不过通过debug,发现是mapper为空,也就是根本没有注入!!先后检查了mapper、interceptor有没有分别加上@Mapper、@Component,发现都解决不了。
猜测:是不是拦截器创建的时候,mapper还没来得及注入
结果:还真是这样…
拦截器原来的配置
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new JWTInterceptor())
.addPathPatterns("/user/**");//其他接口验证token直接拦截器拦截
}
}
注意看!这里是在添加拦截器的时候new了一个拦截器,并没有将拦截器托管给IOC容器,所以就有了一个先后(我猜的)
修改后的配置
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Bean
public JWTInterceptor jwtInterceptor(){
return new JWTInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(jwtInterceptor())
.addPathPatterns("/user/**")
.addPathPatterns("/logout");
}
}
将拦截器注成bean交给Spring托管
参考博客:
(37条消息) 拦截器中不能注入Java bean?_hanjq_code的博客-CSDN博客
(37条消息) SpringBoot自定义拦截器注入Service_咋暖还寒时候的博客-CSDN博客_拦截器注入service