🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 创建拦截器 ``` @Component public class LoginIntercept implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token = request.getParameter("token"); if (StringUtils.isEmpty(token)) { response.getWriter().println("not found token"); return false; } return true; } } ``` ### 注册拦截器 ``` @Configuration public class WebAppConfig { @Autowired private LoginIntercept loginIntercept; @Bean public WebMvcConfigurer WebMvcConfigurer() { return new WebMvcConfigurer() { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginIntercept).addPathPatterns("/*"); }; }; } } ``` ``` 拦截器与过滤器区别 拦截器是AOP( Aspect-Oriented Programming)的一种实现,底层通过动态代理模式完成。 (1)拦截器是基于java的反射机制的,而过滤器是基于函数回调。 (2)拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。 (3)拦截器只能对Controller请求起作用,而过滤器则可以对几乎所有的请求起作用。 (4)在Controller的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 过滤器应用场景:设置编码字符、过滤铭感字符 拦截器应用场景:拦截未登陆用户、审计日志() ```