序 本文主要研究下SecurityContextPersistenceFilter的作用。...优先级仅次于ChannelProcessingFilter SecurityContextPersistenceFilter spring-security-web-4.2.3.RELEASE-sources.jar.../org/springframework/security/web/context/SecurityContextPersistenceFilter.java /** * Populates the...* Note that if {@link SecurityContextPersistenceFilter} is configured to eagerly create * sessions...SecurityContextPersistenceFilter#saveContext spring-security-web-4.2.3.RELEASE-sources.jar!
通过观察Filter的名字,就能大概猜出来这个过滤器的作用,持久化SecurityContext实例 org.springframework.security.web.context.SecurityContextPersistenceFilter
SecurityContextPersistenceFilter SecurityContextPersistenceFilter是Springsecurity链中第二道防线,位于WebAsyncManagerIntegrationFilter...SecurityContextPersistenceFilter主要做两件事: 当请求到来时,从HttpSession中获取SecurityContext并存入SecurityContextHolder...如果使用异步Servlet,默认情况会禁用HttpServletResponse提交时自动保存SecurityContext,而是由SecurityContextPersistenceFilter中保存...saveContext:保存SecurityContext SecurityContextPersistenceFilter源码 // // Source code recreated from a ....再调用repo.saveContext保存SecurityContext 移除FILTER_APPLIED属性 总结: SecurityContextPersistenceFilter 先从HttpSession
SpringSecurity核心过滤器-SecurityContextPersistenceFilter 一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为...Authentication对象所需的信息 UserDetailsService 接受String类型的用户名,创建并返回UserDetail 而这块和SpringSecurity的运行关联我们就需要来看看SecurityContextPersistenceFilter...的作用了 二、SecurityContextPersistenceFilter 首先在Session中维护一个用户的安全信息就是这个过滤器处理的。...= null; } 2.SecurityContextPersistenceFilter 然后我们来看看SecurityContextPersistenceFilter的具体处理逻辑 private
1 SecurityContextPersistenceFilter 通过观察Filter的名字,就能大概猜出来这个过滤器的作用,持久化SecurityContext实例 org.springframework.security.web.context.SecurityContextPersistenceFilter
是由过滤器SecurityContextPersistenceFilter 完成的,核心代码如下 public class SecurityContextPersistenceFilter extends...private SecurityContextRepository repo; private boolean forceEagerSessionCreation = false; public SecurityContextPersistenceFilter...() { this(new HttpSessionSecurityContextRepository()); } public SecurityContextPersistenceFilter
这我们就要引入 Spring Security 中的 SecurityContextPersistenceFilter 了。...,请求在到达 UsernamePasswordAuthenticationFilter 之前都会先经过 SecurityContextPersistenceFilter。...我们来看下它的源码(部分): public class SecurityContextPersistenceFilter extends GenericFilterBean { public void...继承自 GenericFilterBean,而 GenericFilterBean 则是 Filter 的实现,所以 SecurityContextPersistenceFilter 作为一个过滤器,...在 SecurityContextPersistenceFilter 中没能加载到用户信息,原因可能就比较多了,例如: 「上一个请求临走的时候,没有将数据存储到 session 中去。」
Creating filter chain: o.s.s.web.util.matcher.AnyRequestMatcher@1, [o.s.s.web.context.SecurityContextPersistenceFilter...4.2 SecurityContextPersistenceFilter 试想一下,如果我们不使用Spring Security,如果保存用户信息呢,大多数情况下会考虑使用Session对吧?...具体在何处存放用户信息,便是第一篇文章中提到的SecurityContextHolder;认证相关的信息是如何被存放到其中的,便是通过SecurityContextPersistenceFilter。...在4.1概述中也提到了,SecurityContextPersistenceFilter的两个主要作用便是请求来临时,创建 SecurityContext安全上下文信息和请求结束时清空 SecurityContextHolder...源码分析 org.springframework.security.web.context.SecurityContextPersistenceFilter public class SecurityContextPersistenceFilter
2、SecurityContextPersistenceFilter 在每次请求处理之前将该请求相关的安全上下文信息加载到SecurityContextHolder中,然后在该次请求处理完成之后,将SecurityContextHolder...打断点,开始debug springsecurity 的默认登陆url是/login:我们访问一下来捋一捋: 其代码顺序是: WebAsyncManagerIntegrationFilter -> SecurityContextPersistenceFilter...>CsrfFilter-> LogoutFilter->UsernamePasswordAuthenticationFilter->WebAsyncManagerIntegrationFilter->SecurityContextPersistenceFilter...WebAsyncManagerIntegrationFilter -> SecurityContextPersistenceFilter -> HeaderWriterFilter->CsrfFilter...WebAsyncManagerIntegrationFilter->SecurityContextPersistenceFilter->HeaderWriterFilter->CsrfFilter->LogoutFilter
这我们就要引入 Spring Security 中的 SecurityContextPersistenceFilter 了。...,请求在到达 UsernamePasswordAuthenticationFilter 之前都会先经过 SecurityContextPersistenceFilter。...我们来看下它的源码(部分): public class SecurityContextPersistenceFilter extends GenericFilterBean { public void...继承自 GenericFilterBean,而 GenericFilterBean 则是 Filter 的实现,所以 SecurityContextPersistenceFilter 作为一个过滤器,...Security 过滤器链,但是后来的 A 请求没走过滤器链(采用前面提到的第一种方式放行),那么 A 请求中,也是无法通过 SecurityContextHolder 获取到登录用户信息的,因为它一开始没经过 SecurityContextPersistenceFilter
序 本文就来研究一下spring security的FilterSecurityInterceptor 问题 前面的文章讲了SecurityContextPersistenceFilter是如何将context...CHANNEL_FILTER ChannelProcessingFilter http/intercept-url@requires-channel SECURITY_CONTEXT_FILTER SecurityContextPersistenceFilter...security两个入口filter分别如下: AbstractAuthenticationProcessingFilter(主要处理登录) FilterSecurityInterceptor(主要处理鉴权) 而SecurityContextPersistenceFilter
目录: 过滤器详解 4.1 核心过滤器概述 4.2 SecurityContextPersistenceFilter 源码分析 4.3 UsernamePasswordAuthenticationFilter...Creating filter chain: o.s.s.web.util.matcher.AnyRequestMatcher@1, [o.s.s.web.context.SecurityContextPersistenceFilter...4.2 SecurityContextPersistenceFilter 试想一下,如果我们不使用Spring Security,如果保存用户信息呢,大多数情况下会考虑使用Session对吧?...具体在何处存放用户信息,便是第一篇文章中提到的SecurityContextHolder;认证相关的信息是如何被存放到其中的,便是通过SecurityContextPersistenceFilter。...源码分析 org.springframework.security.web.context.SecurityContextPersistenceFilter public class SecurityContextPersistenceFilter
一般正常的项目中都有十几个过滤器,有时候还包含自定义的过滤器,当然我们不可能对每一个过滤器都进行分析,我们需要抓住重点,找比较关键的几个过滤器,它们在认证过程中扮演着重要角色,下面列举几个核心的过滤器: SecurityContextPersistenceFilter...上面已经简述了一堆核心过滤器,这里先从 SecurityContextPersistenceFilter这个过滤器的开端开始分析整个表单登录的认证过程。...SecurityContextPersistenceFilter 当我们填写表单完毕后,点击登录按钮,请求先经过 SecurityContextPersistenceFilter 过滤器,在前面就曾提到...,该Filter有两个作用,其中之一就是在请求到来时,创建 SecurityContext安全上下文,我们来看看它内部是如何做的,部分源码如下: public class SecurityContextPersistenceFilter...UsernamePasswordAuthenticationFilter 经过 SecurityContextPersistenceFilter过滤器后来到 UsernamePasswordAuthenticationFilter
查找了Spring Security的资料后,找到了一个拦截SecurityContextPersistenceFilter public class SecurityContextPersistenceFilter...spring_security_scpf_applied"; //安全上下文存储的仓库 private SecurityContextRepository repo; public SecurityContextPersistenceFilter
这里就要说到一个比较重要的过滤器:SecurityContextPersistenceFilter,它的优先级很高,仅次于WebAsyncManagerIntegrationFilter。...public class SecurityContextPersistenceFilter extends GenericFilterBean { public void doFilter(ServletRequest...repo.saveContext(contextAfterChainExecution, holder.getRequest(), holder.getResponse()); } } } SecurityContextPersistenceFilter...继承自 GenericFilterBean,而 GenericFilterBean则是 Filter 的实现,所以 SecurityContextPersistenceFilter作为一个过滤器,它里边最重要的方法就是...order.next()); //200 put(WebAsyncManagerIntegrationFilter.class, order.next()); put(SecurityContextPersistenceFilter.class
相关的逻辑在Spring Security默认的过滤器SecurityContextPersistenceFilter中,有兴趣可以看相关的源码。...而且默认情况下SecurityContextPersistenceFilter的优先级是高于退出过滤器LogoutFilter的,所以能够保证有Session会话的情况下退出一定能够获取当前用户。
Security用于为Spring应用提供 认证 (authentication) 与 授权 (authorization) 服务,在其SecurityFilterChain过滤器链中默认有15个过滤器;其中SecurityContextPersistenceFilter...处于整个过滤器链的顶端,如下所示: [0 ] WebAsyncManagerIntegrationFilter [1 ] SecurityContextPersistenceFilter [2 ] HeaderWriterFilter...既然一个Http请求的完整执行流程是在一个线程上下文中完成的,那显然可以通过ThreadLocal来实现,SecurityContextPersistenceFilter 就是这么干的哈。...public class SecurityContextPersistenceFilter extends GenericFilterBean { @Override public void...chain.doFilter(holder.getRequest(), holder.getResponse()); } finally { // SecurityContextPersistenceFilter
authentication-provider ref="casAuthenticationProvider"/> <bean id="<em>securityContextPersistenceFilter</em>..." class="org.springframework.security.web.context.<em>SecurityContextPersistenceFilter</em>"> <property name
, order.next()); put(WebAsyncManagerIntegrationFilter.class, order.next()); put(SecurityContextPersistenceFilter.class...3.4 SecurityContextPersistenceFilter SecurityContextPersistenceFilter 主要控制 SecurityContext 的在一次请求中的生命周期...SecurityContextPersistenceFilter 通过 HttpScurity#securityContext() 及相关方法引入其配置对象 SecurityContextConfigurer
CHANNEL_FILTER ChannelProcessingFilter http/intercept-url@requires-channel SECURITY_CONTEXT_FILTER SecurityContextPersistenceFilter...configure(HttpSecurity http) throws Exception { //Each namespace block always creates an SecurityContextPersistenceFilter
领取专属 10元无门槛券
手把手带您无忧上云