springboot 登錄校驗攔截器HandlerInterceptor注入失敗為null問題


攔截器校驗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就不會管理這個對象了,那么里面的注入的對象肯定也必須你自己去創建才行啦 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM