攔截器使用注入接口爲null解決方法

導致問題的做法:

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration addInterceptor = registry.addInterceptor(new ProjectAuthInterceptor() );

        // 攔截配置
        addInterceptor.addPathPatterns("/**");
        //過濾配置
        addInterceptor.excludePathPatterns("XXX");
    }
}
@Slf4j
public class ProjectAuthInterceptor implements HandlerInterceptor {
    @Resource
    private ProjectAuthRepository projectAuthRepository;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     業務代碼
    }
}

問題產生原因:

攔截器加載是在springcontext創建之前完成的,所以在攔截器中注入實體自然就爲null。

解決方式:讓bean提前加載

@Slf4j
public class ProjectAuthInterceptor implements HandlerInterceptor {
    @Resource
    private ProjectAuthRepository projectAuthRepository;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        業務代碼
    }
}

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public HandlerInterceptor getProjectAuthInterceptor(){
        return new ProjectAuthInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration addInterceptor = registry.addInterceptor(getProjectAuthInterceptor());

        // 攔截配置
        addInterceptor.addPathPatterns("/XXX");
       
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章