014 Security的认证流程源码级详解
一:任务
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的认证流程源码级详解的更多相关文章
- Spring Security教程(八):用户认证流程源码详解
本篇文章主要围绕下面几个问题来深入源码: 用户认证流程 认证结果如何在多个请求之间共享 获取认证用户信息 一.用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求 ...
- SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解
用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public clas ...
- Spring Security登录验证流程源码解析
一.登录认证基于过滤器链 Spring Security的登录验证流程核心就是过滤器链.当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了. SpringS ...
- shiro认证流程源码分析--练气初期
写在前面 在上一篇文章当中,我们通过一个简单的例子,简单地认识了一下shiro.在这篇文章当中,我们将通过阅读源码的方式了解shiro的认证流程. 建议大家边读文章边动手调试代码,这样效果会更好. 认 ...
- JobTracker启动流程源码级分析
org.apache.hadoop.mapred.JobTracker类是个独立的进程,有自己的main函数.JobTracker是在网络环境中提交及运行MR任务的核心位置. main方法主要代码有两 ...
- mapreduce job提交流程源码级分析(三)
mapreduce job提交流程源码级分析(二)(原创)这篇文章说到了jobSubmitClient.submitJob(jobId, submitJobDir.toString(), jobCop ...
- [Android]Android系统启动流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5013863.html Android系统启动流程源码分析 首先 ...
- SpringSecurity 初始化流程源码
SpringSecurity 初始化流程源码 本篇主要讲解 SpringSecurity初始化流程的源码部分,包括核心的 springSecurityFilterChain 是如何创建的,以及在介绍哪 ...
- SpringSecurity 默认表单登录页展示流程源码
SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程, 涉及 1.FilterSecurityIntercep ...
随机推荐
- Windows上的程序员神器Cmder
用过Windows版本Git的都知道Git自带了Git Bash,这个在很大程度上满足了我的需求,随着Git的版本升级越来越好用 安装Cmder Cmder官网,它把conemu,msysgit和cl ...
- 饿了么vue-cli3.0+cube-ui笔记
1.目录结构 模板文件是public里的index.html,运行项目的时候,会引用src/main.js(入口文件) 详细文档在这里:https://cli.vuejs.org/zh/config/ ...
- bat脚本(转)
偶尔用到,搜到不错的资料,所以转一下: windows bat脚本for循环中对变量循环赋值 http://blog.csdn.net/u010161379/article/details/50956 ...
- 学了这么久,vue和微信小程序到底有什么样的区别?
前言 写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别.相比之下,小程序的钩子函数要简单得多. 一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下 ...
- 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件
今天安装完MYSQL8.0的版本,根据课本的提示,在CMD里运行,出现了'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件.在网上搜了一下,他的解决方法是这样的: 1.设置一下环境变量 ...
- Oracle数据库的状态查询
本文来源:huang_xw 的<Oracle数据库的状态查询> 1 状态查询 启动状态 SQL语句 结果 nomount select status from v$instance; ST ...
- Flex布局新旧混合写法详解
flex是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 Flex 的支持都不 ...
- Python查找最新测试报告到邮件功能
#coding=utf-8 import smtplib from email.mime.text import MIMEText import unittest import HTMLTestRun ...
- java----javaBean
Beanutils 工具类的下载 http://commons.apache.org/proper/commons-beanutils/ 使用 应用的时候还需要一个logging包http://com ...
- 在lnmp环境下,将原来的PHP7.0升级到PHP7.2
基础环境: 系统:centos6.8 环境:lnmp 停止PHP7.0的版本,在做如下操作: 1.下载php-7.2.6.tar.bz2软件包放在/opt 路径下 mkdir /usr/local ...