一、过滤器 vs 拦截器
1.1、区别
(1)触发时机不一样,过滤器是在请求进入容器后Servlet之前进行预处理的,请求结束返回也是,是在Servlet处理完后,返回给前端之前;
(2)过滤器可以对几乎所有的请求起作用,拦截器只能对action请求起作用;
(3)过滤器不能访问action的上下文,而拦截器可以;
(4)过滤器依赖于Servlet容器,拦截器不依赖;
(5)过滤器是基于函数回调,而拦截器是基于Java的反射机制;
二、应用场景
2.1、过滤器应用场景
(1)过滤敏感词汇;
(2)设置字符编码;
(3)URL级别的权限访问控制;
(4)压缩响应信息;
2.2、拦截器应用场景
(1)登录验证:判断用户是否登录;
(2)权限验证:判断用户是否有权限访问资源,如校验Token;
(3)日志记录:记录请求操作日志(用户的IP、访问时间等),以便统计请求访问量;
(4)处理Cookie、本地化、国际化、主题等;
(5)性能监控:监控请求处理时长;
(6)通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现;
三、参考
https://blog.csdn.net/weixin_44830949/article/details/127493342https://zhuanlan.zhihu.com/p/484289805?utm_id=0