导图社区 SpringSecurity
从SecurityContextHolder获取Authentication;FilterSecurityInterceptor创建,传入FilterSecurityInterceptor。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
SpringSecurity5
认证(Authentication)
架构组件
SecurityContextHolder
存储身份验证详细信息
SecurityContext
从 SecurityContextHolder 获得,包含当前经过身份验证的用户的验证信息
AuthenticationManager
定义 Spring Security 的过滤器如何执行身份验证的 API
Authentication
1、AuthenticationManager输入的用户凭证
2、来自 SecurityContext 的当前用户
principal
credentials
authorities
GrantedAuthority
Authentication上授予用户的权限(即角色、范围等)
ProviderManager
AuthenticationManager 的常用实现
AuthenticationProvider
ProviderManager用于执行特定类型的身份验证。
AuthenticationEntryPoint
用于从客户端请求凭据(即重定向到登录页面、发送WWW-Authenticate响应等)
AbstractAuthenticationProcessingFilter
用于身份验证的基本过滤器
认证机制
Username and Password
OAuth 2.0
SAML 2.0
CAS
Remember Me
JAAS
OpenID
X509 认证
授权(Authorization)
FilterSecurityInterceptor
从SecurityContextHolder获取Authentication
FilterInvocation
FilterSecurityInterceptor创建,传入FilterSecurityInterceptor
SecurityMetadataSource
通过FilterInvocation获取ConfigAttribute
AccessDecisionManager
通过Authentication, FilterInvocation, ConfigAttribute完成授权
拒绝:抛出AccessDeniedException
攻击防护
跨站请求伪造 (CSRF)
内置表达式
hasRole(String role)
hasAnyRole(String… roles)
hasAuthority(String authority)
hasAnyAuthority(String… authorities)
authentication
permitAll
denyAll
isAnonymous()
isRememberMe()
isAuthenticated()
isFullyAuthenticated()
hasPermission(Object target, Object permission)
hasPermission(Object targetId, String targetType, Object permission)
过滤链
1.ChannelProcessingFilter 2.WebAsyncManagerIntegrationFilter 3.SecurityContextPersistenceFilter 4.HeaderWriterFilter 5.CorsFilter 6.CsrfFilter 7.LogoutFilter 8.OAuth2AuthorizationRequestRedirectFilter 9.Saml2WebSsoAuthenticationRequestFilter 10.X509AuthenticationFilter 11.AbstractPreAuthenticatedProcessingFilter 12.CasAuthenticationFilter 13.OAuth2LoginAuthenticationFilter 14.Saml2WebSsoAuthenticationFilter 15.UsernamePasswordAuthenticationFilter 16.OpenIDAuthenticationFilter 17.DefaultLoginPageGeneratingFilter 18.DefaultLogoutPageGeneratingFilter 19.ConcurrentSessionFilter 20.DigestAuthenticationFilter 21.BearerTokenAuthenticationFilter 22.BasicAuthenticationFilter 23.RequestCacheAwareFilter 24.SecurityContextHolderAwareRequestFilter 25.JaasApiIntegrationFilter 26.RememberMeAuthenticationFilter 27.AnonymousAuthenticationFilter 28.OAuth2AuthorizationCodeGrantFilter 29.SessionManagementFilter 30.ExceptionTranslationFilter 处理安全异常 31.FilterSecurityInterceptor 32.SwitchUserFilter
FilterChainProxy
SecurityFilterChain
密码
PasswordEncoder
DelegatingPasswordEncoder
PasswordEncoderFactories
注解
@EnableGlobalMethodSecurity(prePostEnabled = true)
@PreAuthorize
方法调用前访问控制:@PreAuthorize("hasRole('ADMIN')")
@PostAuthorize
方法调用后
@PreFilter
对参数过滤
filterTarget
filterObject
@PostFilter
对返回值过滤:遍历返回的集合或映射,删除表达式为 false 的任何元素
验证流程