福利发送:
1:你想彻底搞明白SpringSecurity么?你想对SpringSecurity6进行源码级别的学习么?
2:你想彻底掌握Spring的应用和源码,在面试的时候吊打面试官么?
那欢迎你加入suns 孙哥的企鹅QQ 3群:583783824
在这里你可以找到志同道合的朋友,还有大神孙哥作为你的领路人。在这里,不仅仅是SpringSecurity更让你在Mybatis、Netty、Rpc、Dubbo、SpringCloud、Docker和k8s....等等技术领域发生翻天覆地的变化。
以上所有,在群里都有我们免费的视频和笔记资料呦~~~
欢迎进群领取,期待你的加入!
文章目录
2:WebAsynManagerIntegrationFilter
7:UsernamePasswordAuthenticationFilter
8:DefaultLoginPageGeneratingFilter
9:DefaultLogoutPageGeneratingFilter
12:SecurityContextHolderAwareRequestFilter
13:AnonymousAuthenticationFilter
前言
1:知识回顾
DelegatingFilterProxy 它的作用就是:实现把 servlet容器中的 Filter 同 Spring 容器中的 bean 关联起来,DelegatingFilterProxy实现了Filter接口,Servlet容器启动就会加载好这个类。借助他可以实现普通的Filter拦截到的Http请求交由FilterChainProxy
FilterChainProxy把 SecurityFilterChain 嵌入到 Web项目的原生过滤器链中DelegatingFilterProxy 把 FilterChainProxy 整合到原生的过滤器链中
FilterChainProxy 是顶层管理者,统一管理 Security Filter和 SecurityFllterChain过滤器链
当请求到达 FilterChainProxy 时,会根据当前请求匹配SecurityFilterChain,然后将请求依次转发给 SecurityFilterChain 中的 Security Filter
2:运行图回顾
一: Security Filters
1:概述
Spring Security 中最终对请求进行处理的就是某个 SecurityFilterChain 中的 Security Filter,这些Filter都设置为 Bean并且注入到 Spring容器中,且会按照先后顺序执行。
下面展示 Spring Security 中给我们提供的过滤器,以及默认情况下会被加载的过滤器
2:Spring Security默认过滤器
FilterOrderRegistration这个在构造函数中按照顺序,put了一个又一个的BeanFilter或者叫Security Filter
FilterOrderRegistration() {
Step order = new Step(100, 100);
this.put(DisableEncodeUrlFilter.class, order.next());
this.put(ForceEagerSessionCreationFilter.class, order.next());
this.put(ChannelProcessingFilter.class, order.next());
order.next();
this.put(WebAsyncManagerIntegrationFilter.class, order.next());
this.put(SecurityContextHolderFilter.class, order.next());
this.put(SecurityContextPersistenceFilter.class, order.next());
this.put(HeaderWriterFilter.class, order.next());
this.put(CorsFilter.class, order.next());
this.put(CsrfFilter.class, order.next());
this.put(LogoutFilter.class, order.next());
this.filterToOrder.put("org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter", order.next());
this.filterToOrder.put("org.springframework.security.saml2.provider.service.web.Saml2WebSsoAuthenticationRequestFilter", order.next());
this.put(X509AuthenticationFilter.class, order.next());
this.put(AbstractPreAuthenticatedProcessingFilter.class, order.next());
this.filterToOrder.put("org.springframework.security.cas.web.CasAuthenticationFilter", order.next());
this.filterToOrder.put("org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter", order.next());
this.filterToOrder.put("org.springframework.security.saml2.provider.service.web.authentication.Saml2WebSsoAuthenticationFilter", order.next());
this.put(UsernamePasswordAuthenticationFilter.c