本文阅读量 次
1. Spring Security¶
1.1 密码管理¶
默认使用 DelegatingPasswordEncoder
进行密码管理
1.1.1 支持的密码存储格式¶
- bcrypt(默认)
BCryptPasswordEncoder
- pbkdf2
Pbkdf2PasswordEncoder
- scrypt
SCryptPasswordEncoder
- argon2
Argon2PasswordEncoder
- sha256
1.1.2 命令行生成密码¶
spring encodepassword password
1.1.3 密码升级¶
[TODO]
1.2 包含模块¶
- spring-security-core.jar
- spring-security-remoting.jar
- spring-security-web.jar
- spring-security-config.jar
- spring-security-ldap.jar *
- spring-security-oauth2-core.jar
- spring-security-oauth2-client.jar
- spring-security-oauth2-jose.jar
- spring-security-oauth2-resource-server.jar
- spring-security-acl.jar
- spring-security-cas.jar
- spring-security-test.jar
- spring-security-taglibs.jar
1.3 重要类¶
- CsrfFilter
- UsernamePasswordAuthenticationFilter
- BasicAuthenticationFilter
- AuthorizationFilter *
- SecurityFilterChain
- SecurityContext
- SecurityContextHolder *
- AuthenticationManager => 决定 Spring Security's Filters 如何进行 authentication;AuthenticationManager 是 interface, 实现类是 ProviderManager。ProviderManager 管理了多个 AuthenticationProvider,认证操作是委托给每个 provider 进行的。所以不同的认证方式,如账号密码,OAuth2 是不同的 AuthenticationProvider
- 不同 ProviderManager 的场景是什么?
- AuthenticationProvider
- DaoAuthenticationProvider 用户名密码
- JwtAuthenticationProvider
- ... *
- Authentication => 认证成功后的一个基本信息封装,包括人,标识,认证类型,认证成功后人拥有的权限
- UserDetails 标识人
- Credentials 密码/凭证
- GrantedAuthority 权限 *
- HttpSessionRequestCache *
- AuthenticationException
- AccessDeniedException
1.4 鉴权(Authentication)¶
1.4.1¶
1.5 认证(Authorization)¶
1.5.1 概要¶
- Role-based 认证规则是以 "ROLE_" 前缀作为开头的,可以通过
GrantedAuthorityDefaults
进行自定义(需要通过 static method 进行注入) - Spring Security 的控制机制可以作用在方法上(method invocation),也可以作用在 web 请求上,或者 websocket 的 message 上
-
分为 pre-invocation 决策和 post-invocation 决策
-
AuthorizationFilter 默认是在 Spring Security filter chain 中的最后一个
1.5.2 Hierarchical Roles¶
1.5.3 请求匹配的方式¶
- 任意请求 anyrequest
- Ant 风格的匹配
- 正则表达式
- 按照 HTTP 方法进行匹配
- 按照 Dispatcher 类型匹配
- 自定义 matcher
1.5.4 重要类¶
- AuthorizationManager(取代 AccessDecisionManager 和 AccessDecisionVoter)
- AuthorityAuthorizationManager
- AuthenticatedAuthorizationManager
- AuthorizationManagers 提供一些有用的静态方法
- AuthorizationFilter => 替换 FilterSecurityInterceptor