导致问题的做法:
@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");
}
}