springboot拦截器中使用@Autowired注解失败报错为null

原因

拦截器加载的时间点在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);
    }
}

你可能感兴趣的:(springboot拦截器中使用@Autowired注解失败报错为null)