導致問題的做法:
@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");
}
}