爲什麼@resource注入爲null
inteceptor在springcontext之前加載,注入必然是null
解決方案
加入註解@Bean
@Configuration
public class WebMVCInterceptor implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(globalInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/userInfo/jwtUser") //登錄頁
.excludePathPatterns("/register") //用戶註冊
.excludePathPatterns("/login"); //用戶登錄
}
/**
* @return globalInterceptor
*/
@Bean
public GlobalInterceptor globalInterceptor() {
return new GlobalInterceptor();
}
}
@Component
public class GlobalInterceptor extends HandlerInterceptorAdapter {
private static Logger logger = LoggerFactory.getLogger(GlobalInterceptor.class);
@Resource
private UserRoleService userRoleService;
/**
* 調用action之前進行攔截
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return super.preHandle(request, response, handler);
}
/**
* 從 cookie 中獲取 token
*/
private String getTokenFromCookie(HttpServletRequest request) {
Cookie[] cookies = Optional.ofNullable(request.getCookies()).orElse(new Cookie[0]); // Optional 強制賦默認值,cookies一定不爲 null
String cookie = Arrays.stream(cookies).filter(item ->
"X-Auth-Token".equals(item.getName())
).findFirst().map(Cookie::getValue).orElse(null);
return cookie;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
}