spring security 流程

security本质:

就是责任链模式,通过一系列的过滤器来实现安全认证。

 

核心:FilterChainProxy

FilterChainProxy 用来统一管理 Spring Security filter

 

FilterChainProxy是如何加载到spring filter链中的?

AbstractSecurityWebApplicationInitializer.onStartup()-》
insertSpringSecurityFilterChain() -> registerFilter()

参考链接:https://blog.csdn.net/zimou5581/article/details/102457858

 

 

 

容器启动后 ,加载一系列的过滤器到 

private List<SecurityFilterChain> filterChains;

ps: 自定义过滤器通过下面加入

 

 

轮到FilterChainProxy过滤器执行的时候:

调用私有方法 doFilterInternal,里面创建FilterChainProxy 静态内部类,并手动调用内部类的doFilter方法,进行 一系列过滤器 的执行

 

 

各个过滤器作用:

WebAsyncManagerIntegrationFilter:将 Security 上下文与 Spring Web 中用于处理异步请求映射的 WebAsyncManager 进行集成。

SecurityContextPersistenceFilter:在每次请求处理之前将该请求相关的安全上下文信息加载到 SecurityContextHolder 中,然后在该次请求处理完成之后,将 SecurityContextHolder 中关于这次请求的信息存储到一个“仓储”中,然后将 SecurityContextHolder 中的信息清除,例如在Session中维护一个用户的安全信息就是这个过滤器处理的。

HeaderWriterFilter:用于将头信息加入响应中。

CsrfFilter:用于处理跨站请求伪造。

LogoutFilter:用于处理退出登录。

 

OAuth2AuthenticationProcessingFilter:  从request中获取Authorization, 并创建Authentication认证对象,并把认证对象设置进当前线程SecurityContextHolder.getContext().setAuthentication(authentication) 

ps: 如果先执行自定义tokenfilter 认证,存入securitycontextholder,

再轮到OAuth2AuthenticationProcessingFilter执行,那么之前的认证对象,将被覆盖

 

 

 

UsernamePasswordAuthenticationFilter:用于处理基于表单的登录请求,从表单中获取用户名和密码。默认情况下处理来自 /login 的请求。从表单中获取用户名和密码时,默认使用的表单 name 值为 username 和 password,这两个值可以通过设置这个过滤器的usernameParameter 和 passwordParameter 两个参数的值进行修改。

DefaultLoginPageGeneratingFilter:如果没有配置登录页面,那系统初始化时就会配置这个过滤器,并且用于在需要进行登录时生成一个登录表单页面。

BasicAuthenticationFilter:检测和处理 http basic 认证。

RequestCacheAwareFilter:用来处理请求的缓存。

SecurityContextHolderAwareRequestFilter:主要是包装请求对象request。

AnonymousAuthenticationFilter:检测 SecurityContextHolder 中是否存在 Authentication 对象,如果不存在为其提供一个匿名 Authentication。

SessionManagementFilter:管理 session 的过滤器

ExceptionTranslationFilter:处理 AccessDeniedException 和 AuthenticationException 异常。

FilterSecurityInterceptor:可以看做过滤器链的出口。

RememberMeAuthenticationFilter:当用户没有登录而直接访问资源时, 从 cookie 里找出用户的信息, 如果 Spring Security 能够识别出用户提供的remember me cookie, 用户将不必填写用户名和密码, 而是直接登录进入系统,该过滤器默认不开启。

 

流程图:

640?wx_fmt=png

 

 

参考链接:

https://my.oschina.net/u/2277392/blog/3082390

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值