本文阅读量 次
1. Spring Security¶
1.1 包含模块¶
- 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.2 重要类¶
- 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.3 鉴权(Authentication)¶
1.3.1¶
1.4 认证(Authorization)¶
1.4.1 概要¶
- Role-based 认证规则是以 "ROLE_" 前缀作为开头的,可以通过
GrantedAuthorityDefaults
进行自定义(需要通过 static method 进行注入) - Spring Security 的控制机制可以作用在方法上(method invocation),也可以作用在 web 请求上,或者 websocket 的 message 上
-
分为 pre-invocation 决策和 post-invocation 决策
-
AuthorizationFilter 默认是在 Spring Security filter chain 中的最后一个
1.4.2 Hierarchical Roles¶
1.4.3 请求匹配的方式¶
- 任意请求 anyrequest
- Ant 风格的匹配
- 正则表达式
- 按照 HTTP 方法进行匹配
- 按照 Dispatcher 类型匹配
- 自定义 matcher
1.4.4 重要类¶
- AuthorizationManager(取代 AccessDecisionManager 和 AccessDecisionVoter)
- AuthorityAuthorizationManager
- AuthenticatedAuthorizationManager
- AuthorizationManagers 提供一些有用的静态方法
- AuthorizationFilter => 替换 FilterSecurityInterceptor