攔截器校驗token 使用到了redis
注入的時候用了@Autowired
@Autowired private StringRedisTemplate redis;
發現注入一直為null 報錯無法使用
原因是 攔截器是在springcontext之前就創建的,redis還未被加載出來,所以注入直接為空
需要修改WebMvcConfigurer配置
舊代碼:
@Configuration public class MVCconfiguration implements WebMvcConfigurer { //token校驗攔截器 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/user/login","/user/verify","/user/register","/user/regCode","/alipaynotify"); } }
修改后代碼如下:
@Configuration public class MVCconfiguration implements WebMvcConfigurer { @Bean LoginInterceptor getinInterceptor(){ return new LoginInterceptor(); } //token校驗攔截器 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getinInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/user/login","/user/verify","/user/register","/user/regCode","/alipaynotify"); } }
新建一個@Bean 方法 讓Spring管理
現在通過@Bean的方式來創建這個攔截器對象,把創建對象的主動權交給了spring,然后攔截器那邊就可以正常注入了,
其實不單單在這里會出現這個情況,只要是你自己new出來的對象,
然后這個對象里面的內容你去@Autowired都會為null,因為你自己new對象了 spring就不會管理這個對象了,那么里面的注入的對象肯定也必須你自己去創建才行啦