假如这是你定义的拦截器:
/**
* 用户登录处理拦截器
*/
public class LoginInterceptor implements HandlerInterceptor{
@Reference
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 前处理,执行handler之前执行此方法。
//返回true,放行 false:拦截
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
//handler执行之后,返回ModeAndView之前
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
//完成处理,返回ModelAndView之后。
//可以再此处理异常
}
}
解决办法:
配置拦截器的,需要重新写一个获取拦截器LoginInterceptor的方法,在方法上面加上@Bean注解,这样就可以在LoginInterceptor中拿到TokenService的对象啦~~
/**
* 拦截器配置
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 登录状态拦截器
registry.addInterceptor(loginInterceptor()).addPathPatterns("/cart/**");
}
@Bean
public LoginInterceptor loginInterceptor() {
return new LoginInterceptor();
}
}