过滤器和拦截器的使用
拦截器应用场景
拦截器本质上是面向切面编程(AOP),符合横切关注点的功能都可以放在拦截器中来实现,主要的应用场景包括:
登录验证,判断用户是否登录。
权限验证,判断用户是否有权限访问资源,如校验token
日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
处理cookie、本地化、国际化、主题等。
性能监控,监控请求处理时长等。
通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现)
过滤器应用场景
1)过滤敏感词汇(防止sql注入)
2)设置字符编码
3)URL级别的权限访问控制
4)压缩响应信息
过滤器和拦截器的区别
区别 | 过滤器 | 拦截器 |
---|---|---|
1.实现方式不同 | 函数调用 | 基于Java的反射机制(动态代理)实现的 |
2.适用范围不同 | 依赖tomcat只能用于web程序中 | 一个spring组件可以单独使用 |
3.触发机制不同 | 进入容器之后servlet之前 | servlet之后controller之前 |
4.请求拦截范围不同 | 所有进入容器的请求 | Controller中请求或访问static目录下的资源请求起作用 |
5.注入bean的不同 | 拦截器加载的时间点在springcontext之前 | |
6.控制执行顺序不同 | order int值越小 级别越高 | 按照拦截器注入顺序 |