Spring Security深入浅出--2、认证流程源码级详解(二)

目录

 

认证流程源码级详解

认证结果如何在多个请求之间共享

获取认证用户信息


认证流程源码级详解

认证结果如何在多个请求之间共享

也就是分析security是如何将请求信息保持在session当中的

接着上一篇源码分析,讲到处理到了AbstractAuthenticationProcessingFilter类中,在认证成功的情况下,调用successfulAuthentication(request, response, chain, authResult);之后

调用SecurityContextHolder.getContext().setAuthentication(authResult); 保持认证后的请求信息。

由于是函数式编程,我们从左往右一步步来分析,查看getContext()方法

最后调用的是SecurityContext的setAuthentication(authResult)方法,因为它只是接口找到他的实现类

SecurityContextImpl类,可以看出来它只是简单的通过set get方法封装了authentication

稍作总结,整理一下上面的思绪:通过认证的请求保存到了SecurityContext,然后在外层是通过SecurityContextHolder调用它的静态方法获取到,这样通过的认证请求信息就可以供其他请求线程来访问了。SecurityContextHolder相当于ThreadLocal,保持线程需要共享的数据。

 在security框架执行的过程中,首先和最后都需要经过的一个过滤器就是SecurityContextPersistenceFiter

当请求刚进来的时候,SecurityContextPersistenceFilter会首先检查session里面有没有SecurityContext,如果有就拿出来放入到线程里,如果是空的那就直接过去了,当响应的时候,如果线程里面有SecurityContext就把它们放入到session里面。

具体代码应用也挺简单的,为了不把篇幅拉太长,想一篇文章写完,所以想了解的自己在细细品读

获取认证用户信息

有上面的源码分析,我们就以及知道了,保存我们认证请求信息的是SecurityContext

可以直接获取,因为springmvc会帮我们注入进去的

如果只想要用户的输入信息,不需要其他信息

发布了470 篇原创文章 · 获赞 95 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_37909508/article/details/103970058