过滤器和拦截器的区别
都是 Aop 思想的一种体现,用来解决项目中 某一类 问题的两种接口(工具),都可以对请求做一些增强
出身
过滤器来自 servlet
拦截器来自 spring
使用范围
过滤器 Filter 实现了 iavax.servlet.Filter 接口,也就是说过滤器的使用要依赖于 Tomcat 等容器,所以它只能在 web 程序中使用。
拦截器 Interceptor 实现了
org.springframework.web.servlet 接口,它是由 Spring 容器进行管理,并不依赖 Tomcat 等容器,既可以应用在 web 程序中,也可以应用在非 web 程序中(Application、Swing)。
实现原理
过滤器基于过滤器链 ApplicationFilterChain 实现
拦截器基于反射
使用场景
过滤器用于 字符编码设置、响应数据压缩(通用功能)
拦截器用于 是否登录判断、权限判断、日志等等(偏重业务功能)
触发时机
小测试
Mybatis 的执行器
SimpleExecutor:简单的执行器,每次执行操作都会开启一个新的 Statement 对象,用完就会立刻关闭
ReuseExecutor:重复使用的执行器,实现了对 Statement 对象的复用
BatchExecutor:可执行批处理任务的执行器。
所有的执行器都必须是在 SqlSession 的生命周期之内,
cookie,session,token
cookie:请求的时候将用户名和密码先发给服务端,服务端验证成功之后,就会将用户名响应给前端,前端就会将这个用户名存储在 cookie 中 ,后续与服务器进行其他交互的时候都需要带上 cookie 进行校验。
优点:
1、存储在客户端
2、帮助在客户端和服务器之间维护状态信息
缺点:
1、安全风险:有被篡改风险
2、容量限制:4KB
3、可用限制:用户可能禁用
session : 客户端发起一个请求到服务端(带上用户名和密码),服务端进行验权,验权通过之后会在服务端生成一个信息(针对当前用户生成一个唯一的session id)并返回给客户端,访问其他页面,请求的时候会带上这个session di 进行验权。
优点:
1、安全性高:存储在服务端
2、容量大:可以保存对象
缺点:
1、占用服务器资源
2、扩展性差(分布式集群)
3、依然需要依赖 cookie 跨域限制
token:客户端发送用户名密码,服务端进行验权,验权通过之后会创建一个token (jwt方式),把这个 token 字符串返回给客户端,当客户端访问其他页面就会带上这个 token 。(服务A生成的token也可以访问服务B,因为生成token是一套规则,只要服务器根据相应的规则解密即可)