一:任务

1.任务

  认证处理流程说明

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

  获取认证用户信息

二:认证处理流程处理说明

1.流程图

  这里只是一个登陆到登陆的认证部分的流程图。

  

2.流程解释

  

3.断点跟踪

  页面登录,进入这里。

  通过username与password得到一个UsernamePasswordAuthenticationToken。

  

  看看这个UsernameOasswordAuthenticationToken对象的类图。

  

  这里全是类,然后我们看到父类AbstractAuthenticationToken是Authentication的实现类,

  其中,Authentication是封装了登录信息。

  

  我们,进入这个方法。

  先说明setAuthenticationed(false)的意思:上面的是否已经通过验证,在这里肯定是写false了。

  

  关于super这里,我们可以看看父类的做法:

  

  开始到setDeatils。

  

  再到getAuthenticationManager

  本身不包括认证判断逻辑,作用是管理AuthenticationProvider。当然要将带有验证信息的authRequest带入。

  这里进入ProviderManager.class类中的authticate方法。

  这里有一个for循环,因为登录方式不同。support在验证provider是否支持当前的登录方式。

  

  如上图所说,如果通过验证,然后进入result = provider.authenticate(authentication);,进行真正的校验。

  这个时候,我们使用的provider是DaoAuthenticationProvider。

  下面看DaoAuthenticationProvider放入关系:

  

  其实,验证都在AbstractUserDetailsAuthenticationProvider中。

  其中,retrieveUser在子类中实现。

  

  

  开始预检查:

  

  预检查

  

  然后,进行附加的检查:

  

  具体看附加的检查,这里还是需要到子类中看:

  

  然后,进入后检查

  

  这个后检查,主要是检查是否过期

  

  成功。

  

  现在重新赋值权限,返回Authentication(已认证)。

  

  ===========================

  ===========================

  这个时候,已经return了。返回到最开始UsernamePasswordFileter,这里开始成功或是失败的处理器。

  

三:session共享

1.说明

  这里从AbstractAuthenticationProcessingFilter开始,因为这里有一个成功后的处理方法是successfulAuthentication。

2.流程图

  

3.断点

  

  关于SecurityContextHolder,是将authentication放入线程,然后当前线程的任何方法都可以拿到authentication。

4.最前面的一个过滤器

  这个过滤器以前没有讲过,这个过滤器的作用,请求先经过,然后是响应返回的时候最后一个经过。

  

  这里先检查session是否有security context,如果有,则将其从session中取出放入线程,没有就继续。

  在返回的时候,会再检查线程,如果线程中有security context,如果有则拿出来放入session中。

5.再说明

  不同的请求,就可以从同一个session中拿到相同的用户认证信息。

  拿到后,放入线程中。

  这里就是认证结果在多个请求之间共享。

四:获取认证用户信息

1.说明

  这里的意思是从session中获取。

2.程序

  将程序写在UserController中。

   @GetMapping("/securityContext")
public Object getSecurityContext() {
return SecurityContextHolder.getContext().getAuthentication();
}

3.启动程序,进行访问

  

4.简单的程序

     @GetMapping("/securityContext")
public Object getSecurityContext(Authentication authentication) {
return authentication;
}

  

  

014 Security的认证流程源码级详解的更多相关文章

  1. Spring Security教程(八):用户认证流程源码详解

    本篇文章主要围绕下面几个问题来深入源码: 用户认证流程 认证结果如何在多个请求之间共享 获取认证用户信息 一.用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求 ...

  2. SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解

    用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public clas ...

  3. Spring Security登录验证流程源码解析

    一.登录认证基于过滤器链 Spring Security的登录验证流程核心就是过滤器链.当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了. SpringS ...

  4. shiro认证流程源码分析--练气初期

    写在前面 在上一篇文章当中,我们通过一个简单的例子,简单地认识了一下shiro.在这篇文章当中,我们将通过阅读源码的方式了解shiro的认证流程. 建议大家边读文章边动手调试代码,这样效果会更好. 认 ...

  5. JobTracker启动流程源码级分析

    org.apache.hadoop.mapred.JobTracker类是个独立的进程,有自己的main函数.JobTracker是在网络环境中提交及运行MR任务的核心位置. main方法主要代码有两 ...

  6. mapreduce job提交流程源码级分析(三)

    mapreduce job提交流程源码级分析(二)(原创)这篇文章说到了jobSubmitClient.submitJob(jobId, submitJobDir.toString(), jobCop ...

  7. [Android]Android系统启动流程源码分析

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5013863.html Android系统启动流程源码分析 首先 ...

  8. SpringSecurity 初始化流程源码

    SpringSecurity 初始化流程源码 本篇主要讲解 SpringSecurity初始化流程的源码部分,包括核心的 springSecurityFilterChain 是如何创建的,以及在介绍哪 ...

  9. SpringSecurity 默认表单登录页展示流程源码

    SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程, 涉及 1.FilterSecurityIntercep ...

随机推荐

  1. python相关的安装软件

    本次安装的系统是WINDOWS系统 一.python3.anaconda和python2 1.准备工具:python3.python2安装包可以直接从官网下载https://www.python.or ...

  2. C# 操作Excel加水印

    首先下载免费版的Excel组件- Spire.XLS,安装完成后在bin目录里面有需要用到的dll文件,引用到自己项目里面. 我这里全引进来了,一共就四个: 界面 效果 全部代码 private st ...

  3. LuoGu P2002 消息扩散

    题目传送门 这个题其实就是tarjan缩点的板子题对吧....至少我是这么想的 首先这是个有向图,对于一个有向图,我们肯定要考虑环的存在与否,恰好这个题又是让我们找出最少的点,使得这几个点能够走遍全图 ...

  4. Web框架之Bootstrap

    一.Bootstrap简介 Bootstrap,来自Twitter的设计师Mark Otto和Jacob Thornton合作开发,是目前很受欢迎的Web前端开源框架. Bootstrap 是基于HT ...

  5. Windows7上完全卸载Oracle 12c操作步骤

    注:本文来源于:< Windows7上完全卸载Oracle  12c操作步骤 > 1.关闭Oracle所有的服务,按[win+R]运行[services.msc]找到所有Oracle开头的 ...

  6. Confluence 6 管理插件和组件

    一个 组件(add-on)是与 Confluence 分开安装的功能,能够加强 Confluence 的功能和使用.插件(plugin)和 组件(add-on)这 2 个词通常是一起使用的. 一共有 ...

  7. Confluence 6 在你的 LDAP 目录中优化用户和用户组数量

    连接 LDAP 服务器能为你的用户管理提供灵活高效的解决方案.为了达到优化的性能,后台同步程序将会从 LDAP 上查找和下载数据同步到你本地的 Confluence 服务器数据库上同时还会定时的更新数 ...

  8. conda 安装多个版本的python

    再添加一个python3.6conda create --name py36 python=3.6然后通过source activate py36来激活环境

  9. DOBRI

    问题 : DOBRI 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给出一个包含N个整数的序列A,定义这个序列A的前缀和数组为SUM数组 ,当SUM数组中的第i个元素等于在i前面的三个 ...

  10. this容易混淆的示例

    [注]this 永远不会混乱,混乱的是我们而已. /* this永远指向当前函数的主人. this混乱: 1.添加了定时器/延时器 2.事件绑定 [注]函数如果发生了赋值,this就混乱了. */ 示 ...