wiki
1. 核心名词
- principal : 主体,使用系统的用户或设备或从其他系统远程登录的用户等。简单说就是谁使用系统谁就是主体
- authentication : 认证,权限管理系统确认一个主体的身份,允许主体进入系统。简单说就是“主体”证明自己是谁
- authorization : 授权,将操作系统的“权力”授予“主体”,这样主体就具备了操作系统中特定功能的能力。简单说就是给用户分配权限
2. 代码
Spring Security 本质是一个过滤器链,同时 这些 Filter 作为 Bean 被 Spring 管理,它们并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器(AuthenticationManager
)和决策管理器 (AccessDecisionManager
)进行处理。
处理过程为:
1 | request -> SecurityContextPersistenceFilter -> UsernamePasswordAuthenticationFilter -> FilterSecurityInterceptor -> 资源 |
SecurityContextPersistenceFilter
: 这个 Filter 是整个拦截过程的出入口,会在请求开始时从中获取SecurityContext
,然后把它设置给SecurityContextHolder
。在请求完成后将之再保存到SecurityContextRepository
,同时清除持有的SecurityContext
UsernamePasswordAuthenticationFilter
: 用于处理来自表单提交的认证。该表单必须提供对应的用户名和密码,内部调用AuthenticationManager
,并提供登录成功或失败后处理的AuthenticationSuccessHandler
和AuthenticationFailureHandler
FilterSecurityInterceptor
: 用于保护 Web 资源。使用AccessDecisionManager
对当前用户进行授权访问