SpringSecurity原理
2024-06-06 11:40:10 0 举报
SpringSecurity运行原理图
作者其他创作
大纲/内容
是
SecurityContext
用户以及密码认证的核心过滤器,在表单认证的方法中,这是最关键的过滤器
SecurityContextHolder
span style=\
自定义认证Provider:实现AuthenticationProvider接口,实现认证方法
通过HttpSecurity的addFilterBefore或addFilterAfter或addFilter,注入到过滤器链中
HeaderWriterFilter
ClientAuthenticationProvider(自定义)
+ Authentication authenticate(Authentication authentication)+ boolean supports(Class<?> aClass)
LogoutFilter
用于用户认证成功后,重新恢复因为登录被打断的请求
这个过滤器决定了访问特定路径应该具备的权限,访问的用户的角色,权限是什么?访问的路径需要什么样的角色和权限?这些判断和处理都是由该类进行的。如果你要实现动态权限控制就必须研究该类
跨域相关的过滤器
匿名认证过滤器。对于 Spring Security 来说,所有对资源的访问都是有 Authentication 的。对于无需登录(UsernamePasswordAuthenticationFilter)直接可以访问的资源,会授予其匿名用户身份。
AnonymousAuthenticationFilter
RequestCacheAwareFilter
WebAsyncManagerIntegrationFilter
用来给http响应添加一些Header。你可以通过 HttpScurity#headers()来定制请求Header
SecurityContextHolder 默认有三种存储 SecurityContext 的策略:MODE_THREADLOCAL:利用ThreadLocal机制来保存每个使用者的SecurityContext,缺省策略,平常我们使用这个就行了。MODE_INHERITABLETHREADLOCAL:利用InheritableThreadLocal机制来保存每个使用者的 SecurityContext。多用于多线程环境环境下。MODE_GLOBAL:静态机制,作用域为全局。目前不太常用。
SecurityContextPersistenceFilter
UserDetailsService
# UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException
WebUserDetailsService
+ WebUserDetails loadUserByUsername(String username)
FilterSecurityInterceptor
将Security上下文与Spring Web中用于处理异常请求映射的WebAsyncManager进行集成
处理注销的过滤器
异常Handler进行异常处理,并返回错误提示信息
主要来传输异常事件
AuthenticationProvider
# Authentication authenticate(Authentication var1)# boolean supports(Class<?> var1)
AuthenticationManager认证管理模块
自定义过滤器
AuthenticationManagerBuilder获取AuthenticationManager对象
UsernamePasswordAuthenticationFilter
TokenFilter
CorsFilter
AuthenticationManager
# Authentication authenticate(Authentication var1)
过滤请求协议类型(HTTP or HTTPS)
ChannelProcessingFilter
ExceptionTransiationFilter
SecurityContextHolderAwareRequestFilter
认证成功
1、继承AbstractAuthenticationProcessingFilter类,重写attemptAuthentication方法2、继承GenericFilterBean,重写doFilter方法3、继承OncePerRequestFilter,重写doFilterInternal方法,一个请求该过滤器只被处理一次4、实现Filter接口,重写doFilter方法
ProviderManager
- List<AuthenticationProvider> providers
+ Authentication authenticate(Authentication authentication)(遍历所有AuthenticationProvider,由supports方法来决定由哪个provider去校验请求过来的authentication)
font color=\"#ff0000\
否
Authentication
用于防止csrf攻击,前后端使用json交互需要注意的一个问题。在你使用jwt等token技术时是不需要这个的
CsrfFilter
Session 管理器过滤器,内部维护了一个 SessionAuthenticationStrategy 用于管理 Session
自定义过滤器,并加入过滤器链中
SessionCreationPolicy.ALWAYS利用HttpSecurityContextRepository从HttpSesion中获取SecurityContext对象,然后放入SecurityContextHolder。在所有拦截器都处理完成后,再把SecurityContext存入HttpSession,并清除SecurityContextHolder内的引用。
控制SecurityContext在一次请求中的生命周期。请求来临时,创建SecurityContext安全上下文信息,请求结束时清空SecurityContextHolder
DaoAuthenticationProvider(默认)
HTTP请求
SessionManagementFilter
用来实现j2ee中Servlet Api一些接口方法
SpringContext存储当前线程的认证信息
WebAuthenticationProvider(自定义)
收藏
收藏
0 条评论
下一页