SpringSecurity概览
简介
安全管理方案常见三种,分别是
- Shiro
- Spring Security
- 自开发安全框架
在与Spring集成便捷性和微服务应用场景下,Spring Security更加便捷。
核心功能
- 认证
1.1 表单认证
1.2 RememberMe 自动认证
1.3 其他 - 授权
2.1 URL授权
2.2 方法级授权
认证
- 认证信息主要由Authentication接口的实现类来保存。
- Security的认证工作主要由AuthenticationManager接口管理,对外提供authenticate方法接口。
- AuthenticationManager最主要实现类是ProviderManager,而ProvideManager管理AuthenticationProvider实例。
- 各个AuthenticationProvider相当于不同的机制,如form表单验证或短信验证码验证。
授权
AccessDecisionManager
决策器,逐个遍历Voter决定是否允许访问。
AccessDecisionVoter
检查用户是否具备应有角色
Security中,用户访问资源都会封装成ConfigAttribute,该对象有一个getAttribute方法会返回角色的名称,即用ROLE_作为前缀修饰的角色。Voter所做的事情就是比较角色和请求 ConfigAttribute的关系。
过滤器
Spring Security认证和首选都是通过过滤器实现的,常用的过滤器有以下:
ChannelProcessingFiler
FIler | 作用 | 默认加载 |
---|---|---|
ChannelProcessingFiler | 过滤请求协议,https/http | No |
SecurityContextPersistenceFilter | 将用户信息加载到SecurityContextHolder,请求结束后再删除SecurityContextHolder中的信息 | Yes |
CorsFilter | 跨域问题 | No |
CsrfFilter | csrf攻击 | Yes |
LogoutFilter | 注销登录 | Yes |
UsernamePasswordAuthenticationFilter | 表单登录 | Yes |
RememberMeAuthenticationFilter | RememberMe登录 | No |
FilterSecurityInterceptor | 处理授权 | Yes |
过滤器并不是直接注入到Web中的过滤器链中,而是交由FilterChainProxy统一管理,通过FilterChainProxy作为整体嵌入到原来的链中。
用户信息访问
- 默认登录信息通过ThreadLocal保存在SecurityContextHolder中,只能被当前线程访问到,即当前登录用户信息和当前请求线程是绑定在一起的。
- 当请求结束后将Holder中的数据取出保存在Session中,之后清楚Holder中的数据。