版权声明:个人原创 https://blog.csdn.net/qq_42459181/article/details/89333606
一、Spring Security 深入
1. 认证流程:
2. 过滤器链:
SecurityContextPersistenceFilter的作用:当请求进入时,检查session里是否有SecurityContext,如果有,就将SecurityContext放入线程中;当响应时,检查线程中是否有SecurityContext,如果有就将SecurityContext放入session中。
3. “记住我” 功能:
3. 两种实现方式:
1.将登陆用户的Token持久化到数据库:用户第一次登陆时勾选“记住我”,登陆成功时将Token分别写入Cookie和数据库中,等用户发起服务请求时,带着Token访问服务器,服务器会拿着这个Token去数据库里查找,如果有,则验证用户处于已登录状态,允许访问服务。此种方式的优劣如下。
优点:Token被持久化到数据库,服务器重启之后Token也不会消失,可以顺利访问。
缺点:查询Token信息会访问数据库(传统关系型数据库,如mysql),并发压力较大,性能较差。
原理如下:
RememberMeAuthenticationFilter 所在位置:
位于绿色过滤器链的倒数第二个。
源码如下:
2.session 方式:用户登陆后会将session储存在服务器上,再次访问会校验session。此种方式不具有持久化,重启服务器时,保存在服务器中的session将消失。至于能不能配合redis做短暂的持久化(redis也有过期时间),以后另做研究。
源码如下:
4. 短信验证码 功能:
通过阿里云短信服务实现,在此不做赘述。