Security 登录认证流程详细分析详解

目录
  • 一、前言:流程图:
  • 二、前台发送请求
  • 三、请求到达UsernamePasswordAuthenticationFilter过滤器
  • 四、制作UsernamePasswordAuthenticationToken
  • 五、父类中的 AuthenticationManager 对Token 进行认证
  • 六、我们找到了AuthenticationManager 实现类ProviderManager
  • 七、AuthenticationProvider接口
  • 八、DaoAuthenticationProvider
  • 九、UserDetailsService和UserDetails接口
  • 10、返回过程

最近在写毕业设计的时候用这个框架,小伙伴给我提了个多种登录方式的需求,说仅仅只有账号、密码登录不太行,说让我增加几种方式,如:手机短信验证登录、邮箱验证登录、第三方登录等等(前两个已经实现,第三方登录还没搞定)一开始也挺让人懵逼,无从下手的。

看了好几篇博客,都弄的不完整,或者就是太高级了,我不太能行。之后就是看博客,说弄懂原理、流程后,写多种方式其实也蛮简单。然后我就老老实实的去Debug了。

这样子的效果是十分好的,多Debug几回,无论是对使用,还是对于编写代码,以及对这个技术的理解都会加深一些,以前一些迷惑也会恍然大悟。

Debug的过程要找到一个脉络,不要心急,前期多做个笔记,不会多查一下,那样一切都会显得非常轻松的。

前文:SpringBoot整合Security,实现权限控制

本文适合需要入门及已经会简单使用Security的小伙伴们。

对于一门技术,会使用是说明我们对它已经有了一个简单了解,把脉络都掌握清楚,我们才能更好的使用它,以及更好的实现定制化。

接下来就让

(0)

相关推荐

  • Spring Security 自定义短信登录认证的实现

    自定义登录filter 上篇文章我们说到,对于用户的登录,security通过定义一个filter拦截login路径来实现的,所以我们要实现自定义登录,需要自己定义一个filter,继承AbstractAuthenticationProcessingFilter,从request中提取到手机号和验证码,然后提交给AuthenticationManager: public class SmsAuthenticationFilter extends AbstractAuthenticationPro

  • Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码

    目录 前言 本文主要的功能 一.准备工作 1.统一错误码枚举 2.统一json返回体 3.返回体构造工具 4.pom 5.配置文件 二.数据库表设计 初始化表数据语句 三.Spring Security核心配置:WebSecurityConfig 四.用户登录认证逻辑:UserDetailsService 1.创建自定义UserDetailsService 2.准备service和dao层方法 五.用户密码加密 六.屏蔽Spring Security默认重定向登录页面以实现前后端分离功能 1.实

  • 详解Spring Security的formLogin登录认证模式

    一.formLogin的应用场景 在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验证,而且没有定制的登录页面,所以使用场景比较窄. 对于一个完整的应用系统,与登录验证相关的页面都是高度定制化的,非常美观而且提供多种登录方式.这就需要Spring Security支持我们自己定制登录页面,也就是本文给大家介绍的formLogin模式登录认证模式. 准备工作 新建一个Spring B

  • Spring Security使用数据库登录认证授权

    目录 一.搭建项目环境 1.创建 RBAC五张表 2.创建项目 二.整合 Spring Security实现用户认证 1.后端整合 2.前端整合 三.整合 Spring Security实现用户授权 1.后端 2.前端 一.搭建项目环境 1.创建 RBAC五张表 RBAC,即基于角色的权限访问控制(Role-Based Access Control),就是用户通过角色与权限进行关联.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系. 在 MySQL数据库中,创建如下几个表: D

  • SpringSecurity构建基于JWT的登录认证实现

    最近项目的登录验证部分,采用了 JWT 验证的方式.并且既然采用了 Spring Boot 框架,验证和权限管理这部分,就自然用了 Spring Security.这里记录一下具体实现. 在项目采用 JWT 方案前,有必要先了解它的特性和适用场景,毕竟软件工程里,没有银弹.只有合适的场景,没有万精油的方案. 一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性.可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:"你是谁"."你有哪些权限".&qu

  • Security 登录认证流程详细分析详解

    目录 一.前言:流程图: 二.前台发送请求 三.请求到达UsernamePasswordAuthenticationFilter过滤器 四.制作UsernamePasswordAuthenticationToken 五.父类中的 AuthenticationManager 对Token 进行认证 六.我们找到了AuthenticationManager 实现类ProviderManager 七.AuthenticationProvider接口 八.DaoAuthenticationProvide

  • Spring Security登录表单配置示例详解

    目录 Spring Security登录表单配置 1.引入pom依赖 2.bootstrap.yml添加配置 3.创建login.html 4.创建配置类 5.配置细节 6.登陆成功 7.登陆失败 8.注销登录 Spring Security登录表单配置 1.引入pom依赖 ​ 创建一个Spring Boot工程,引入Web和Spring Security依赖: <?xml version="1.0" encoding="UTF-8"?> <pro

  • MyBatis Plus插件机制与执行流程原理分析详解

    MyBatis Plus插件 MyBatis Plus提供了分页插件PaginationInterceptor.执行分析插件SqlExplainInterceptor.性能分析插件PerformanceInterceptor以及乐观锁插件OptimisticLockerInterceptor. Mybatis 通过插件 (Interceptor) 可以做到拦截四大对象相关方法的执行 ,根据需求完成相关数据的动态改变. 四大对象是: Executor StatementHandler Parame

  • 详解最简单易懂的Spring Security 身份认证流程讲解

    最简单易懂的Spring Security 身份认证流程讲解 导言 相信大伙对Spring Security这个框架又爱又恨,爱它的强大,恨它的繁琐,其实这是一个误区,Spring Security确实非常繁琐,繁琐到让人生厌.讨厌也木有办法呀,作为JavaEE的工程师们还是要面对的,在开始之前,先打一下比方(比方好可怜): Spring Security 就像一个行政服务中心,如果我们去里面办事,可以办啥事呢?可以小到咨询简单问题.查询社保信息,也可以户籍登记.补办身份证,同样也可以大到企业事

  • Spring Security认证器实现过程详解

    目录 拦截请求 验证过程 返回完整的Authentication 收尾工作 结论 一些权限框架一般都包含认证器和决策器,前者处理登陆验证,后者处理访问资源的控制 Spring Security的登陆请求处理如图 下面来分析一下是怎么实现认证器的 拦截请求 首先登陆请求会被UsernamePasswordAuthenticationFilter拦截,这个过滤器看名字就知道是一个拦截用户名密码的拦截器 主要的验证是在attemptAuthentication()方法里,他会去获取在请求中的用户名密码

  • Spring Security动态权限的实现方法详解

    目录 1. 动态管理权限规则 1.1 数据库设计 1.2 实战 2. 测试 最近在做 TienChin 项目,用的是 RuoYi-Vue 脚手架,在这个脚手架中,访问某个接口需要什么权限,这个是在代码中硬编码的,具体怎么实现的,松哥下篇文章来和大家分析,有的小伙伴可能希望能让这个东西像 vhr 一样,可以在数据库中动态配置,因此这篇文章和小伙伴们简单介绍下 Spring Security 中的动态权限方案,以便于小伙伴们更好的理解 TienChin 项目中的权限方案. 1. 动态管理权限规则 通

  • Spring Security 多过滤链的使用详解

    目录 一.背景 二.需求 1.给客户端使用的api 2.给网站使用的api 三.实现方案 方案一: 方案二 四.实现 1.app 端 Spring Security 的配置 五.实现效果 1.app 有权限访问 api 2.app 无权限访问 api 3.admin 用户有权限访问 网站 api 4.dev 用户无权限访问 网站 api 六.完整代码 一.背景 在我们实际的开发过程中,有些时候可能存在这么一些情况,某些api 比如: /api/** 这些是给App端使用的,数据的返回都是以JSO

  • 汇编语言教程文件后缀大小写S区别分析详解

    目录 一.大小写后缀的区别 二.编译的相关流程 1.预处理器 2.编译阶段 3.汇编阶段 4.链接阶段 一.大小写后缀的区别 .s     汇编语言源程序;汇编 .S     汇编语言源程序;预处理,汇编 小写的s文件,在后期阶段不在进行预处理操作,所以我们不能在这里面写预处理的语句在里面 大写的S文件,还会进行预处理.汇编等操作,所以我们可以在这里面加入预处理的命令 二.编译的相关流程 预处理(Pre-Processing)-->编译(Compiling)-->汇编(Assembling)-

  • python机器学习算法与数据降维分析详解

    目录 一.数据降维 1.特征选择 2.主成分分析(PCA) 3.降维方法使用流程 二.机器学习开发流程 1.机器学习算法分类 2.机器学习开发流程 三.转换器与估计器 1.转换器 2.估计器 一.数据降维 机器学习中的维度就是特征的数量,降维即减少特征数量.降维方式有:特征选择.主成分分析. 1.特征选择 当出现以下情况时,可选择该方式降维: ①冗余:部分特征的相关度高,容易消耗计算性能 ②噪声:部分特征对预测结果有影响 特征选择主要方法:过滤式(VarianceThreshold).嵌入式(正

  • Seata AT模式TM处理流程图文示例详解

    目录 TM的作用 源码分解 小结 TM的作用 我们根据源码解读画出了下图,该图示展现了TM在整个Seata AT模式的分布式事务中所起的作用: 从上图中可以看出,TM主要有两个作用: 开启分布式事务,以拿到XID作为分布式事务开启的标识:一定是从TC拿到XID,不是从调用方传递过来的XID: 根据所有RM的处理结果来决定是提交分布式事务还是回滚分布式事务: 转换成伪代码如下: try{ // 开启分布式事务 String xid = TM.beginGlobalTransaction(); //

随机推荐