先上完整代码
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
@Resource
private UserService userService;
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
System.out.println("拦截器");
return true;
}
}
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Resource
private AuthenticationInterceptor authenticationInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor)
.addPathPatterns("/**");
}
}
复制一下即可完成一个简单的拦截器。
接下来就是坑位:
1、
问题:拦截器没有效果,连打印都打印不出来
原因:存在其他的拦截器而且继承了WebMvcConfigurationSupport,导致和WebMvcConfigurer冲突
解决:WebMvcConfigurer是WebMvcConfigurationSupport的子类,只要把两个拦截器写到一起,然后继承WebMvcConfigurationSupport即可
代码:
extends WebMvcConfigurationSupport
2、
问题:拦截器里面使用service类报空指针错误,无法使用service类方法
原因:在WebMvcConfig不能new AuthenticationInterceptor()
解决:采取自动注入的方式
代码:
@Resource
private AuthenticationInterceptor authenticationInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor)
.addPathPatterns("/**");
}