一、结构概览
spring security 解决的问题就是“安全访问控制”,而这些无法避免对请求进行拦截,所以可以想到其使用的就是常见的Filter链。
- SecurityContextPersistenceFilter:守门员,出口也是入口,初始化相关框架环境
- UsernamePasswordAuthernticationFilter:账号密码验证 ->AuthenticationManagert
- FilterSecurityInterceptor:授权验证->AccessDecisionManager
- ExecptionTranslationFilter: 异常拦截
二、认证流程
流程图:
根据上面的流程可以知道,使用者只要提供一个UserDeatilsService里面封装了查询出来的用户。
简单的自定义实现UserDetailsService
加密工作方式:
三、授权流程
流程图:
基于投票机制的三个实现类:
- AffirmativeBased:一个赞成就通过,都反对也通过(默认)
- ConsensusBased:少数服从多数
- UnanimousBased:一个反对都反对,通过必须全部赞成
经过上面的分析,可以得出结论,一般情况下,在整个spring security框架中,认证需要使用者参与的部分就是用户信息的查询(UserDetailsService的实现),而授权的部分几乎不需要使用者进行参与,只要给用户绑定权限,资源分配权限就可以委托给框架进行校验了。