原因
拦截器加载的时间点在springcontext之前,所以在拦截器中注入自然为null
修改前
public class IsLoginInterceptorImpl implements HandlerInterceptor {
@Autowired
private KeepIdentityService keepIdentityService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("IsLoginInterceptorImpl.preHandle");
// 该方法会在请求转发到Controller之前被执行
if(!keepIdentityService.isIdentity("user",request)){
response.setCharacterEncoding("UTF-8");
JSONObject json = new JSONObject();
json.put("status",1);
json.put("msg","请登录!");
response.getWriter().append(json.toString());
return false;
}
// 开始
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 该方法会在Controller处理之后但是视图还没有解析的时候执行
// 请求已经被处理
System.out.println("IsLoginInterceptorImpl.postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 该方法会在整个请求结束(请求结束,但是并未返回给用户)之后执行
// 整个请求结束
System.out.println("IsLoginInterceptorImpl.afterCompletion");
}
}
@Configuration
public class InterceptorChainLoader extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
// 有多个拦截器可以多次add组成拦截器链
registry.addInterceptor(new IsLoginInterceptorImpl()).addPathPatterns("/**").excludePathPatterns("/user/login", "/user/register");
super.addInterceptors(registry);
}
}
修改后
@Configuration
public class InterceptorChainLoader extends WebMvcConfigurationSupport {
@Bean
public IsLoginInterceptorImpl isLoginInterceptor(){
return new IsLoginInterceptorImpl();
}
@Override
protected void addInterceptors(InterceptorRegistry registry) {
// 有多个拦截器可以多次add组成拦截器链
registry.addInterceptor(isLoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login", "/user/register");
super.addInterceptors(registry);
}
}