关于 spring security 对用户名和密码的校验过程
1.执行 AuthenticationManager 认证方法 authenticate(UsernamePasswordAuthenticationToken)
2.ProviderManager 实现了 authenticate(UsernamePasswordAuthenticationToken)
3.ProviderManager 是通过自身管理的n个AuthenticationProvider认证提供者去进行认证
4.AuthenticationProvider认证提供者 使用自身的authenticate(Authentication)方法;
5.AuthenticationProvider的authenticate(Authentication)方法是被AbstractUserDetailsAuthenticationProvider所实现
6.AbstractUserDetailsAuthenticationProvider 抽象用户细节认证提供者 会调用 自身声明的retrieveUser抽象方法来检索用户
7.retrieveUser抽象方法在DaoAuthenticationProvider 持久层认证提供者 中进行了体现
8.DaoAuthenticationProvider 持久层认证提供者 包含 UserDetailsService 用户细节处理器,
9.用户细节处理器的loadUserByUsername方法又被自定义的UserDetailsServiceImpl所实现
10.UserDetailsServiceImpl实现类取出数据库中的该登录名的数据(selectUserByUserName),并将用户的菜单权限数据和基本信息封装成一个UserDetails用户细节返回!
11.AbstractUserDetailsAuthenticationProvider 抽象用户细节认证提供者 最终获取到UserDeatils
12.然后AbstractUserDetailsAuthenticationProvider 调用additionalAuthenticationChecks方法对用户的密码进行最后的检查
13.密码的校验是由BCryptPasswordEncoder 通过实现PasswordEncoder 的matches方法来完成,
14.BCryptPasswordEncoder .matches 方法会校验密文是否属于自己的编码格式,最终密码校验的细节完全在BCrypt实体类中进行
###BCrypt 如何判断 密码和数据库的密码是否相同的?
首先BCrypt 是从数据库的密码中提取加密的盐值,并校验数据库密码的长度不能小于28和数据库密码的版本(前两个字符必须是"$2")
然后从数据库密码中获取真正的盐值,然后将用户提交的密码结合盐值加密,对比加密后的密码与数据库是否一致
当然特殊情况下你可以在BCrypt 源码的第345行打断点,再直接操作数据库就可以修改密码

关于 spring security 对用户名和密码的校验过程的更多相关文章
- Spring Security之用户名+密码登录
自定义用户认证逻辑 处理用户信息获取逻辑 实现UserDetailsService接口 @Service public class MyUserDetailsService implements Us ...
- spring security使用哈希加密的密码
之前我们都是使用MD5 Md5PasswordEncoder 或者SHA ShaPasswordEncoder 的哈希算法进行密码加密,在spring security中依然使用只要指定使用自定义加密 ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_09-SpringSecurityOauth2研究-Oauth2密码模式授权
密码模式(Resource Owner Password Credentials)与授权码模式的区别是申请令牌不再使用授权码,而是直接 通过用户名和密码即可申请令牌. 测试如下: Post请求:htt ...
- Spring 数据库配置用户名和密码加密
单个数据库配置 : 一般spring容器启动时,通过PropertyPlaceholderConfigurer类读取jdbc.properties文件里的数据库配置信息.通过这个原理,我们把加密后的数 ...
- 单点登录(SSO)解决方案之 CAS客户端与Spring Security集成
接上篇:单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 Spring Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制 ...
- SpringBoot集成Spring Security(4)——自定义表单登录
通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢, ...
- Spring Security 接口认证鉴权入门实践指南
目录 前言 SpringBoot 示例 SpringBoot pom.xml SpringBoot application.yml SpringBoot IndexController SpringB ...
- Spring Security笔记:自定义Login/Logout Filter、AuthenticationProvider、AuthenticationToken
在前面的学习中,配置文件中的<http>...</http>都是采用的auto-config="true"这种自动配置模式,根据Spring Securit ...
- 使用Spring Security Oauth2完成RESTful服务password认证的过程
摘要:Spring Security与Oauth2整合步骤中详细描述了使用过程,但它对于入门者有些重量级,比如将用户信息.ClientDetails.token存入数据库而非内存.配置 ...
随机推荐
- NB-IoT技术的低成本因素是来源于什么
一套成熟的蜂窝物联网应用体系,涉及NB-IoT芯片.通信模组.UE.运营商网络.数据流量费用.通信协议栈.物联网平台.垂直应用软件.云平台.大数据.工程安装.运营维护等多个方面.对于物联网终端的海量部 ...
- RS485转以太网的概述和应用领域
如今随着物联网技术的不断发展,各种接口更新换代的速度非常的快,RS485转以太网的主要作用就是提供串口转TCP/IP网络接口的功能,它可以将RS232/485/422串口转换成TCP/IP网络接口,实 ...
- django支持多语言
Django支持多语言切换 下面介绍下如何使网站或APP国际化,让其支持多种语言 . 官网 效果 1.创建locale文件夹 先在项目根目录下创建一个名为locale的文件夹,这个文件夹是用来存放dj ...
- 测试流程规范--测试准入、准出、停止标准、bug优先级定义
一.背景 最近在推进组内流程规范专项建设,从"研发测试流程"."提测规范"."测试准入标准"."bug优先级标准".&q ...
- Spring Cloud Alibaba 基础
Spring Cloud Alibaba 基础 什么是Spring Cloud Alibaba 这里我们不讲解Spring Cloud 和 Spring Cloud Alibaba 的关系,大家自己查 ...
- XJOI NOI训练2 传送
NTT循环卷积 30分: 可以发现这是一个很明显的分层$DP$,设$dp[i][j]$表示当前走了j步走到i号节点的方案数.如果当前走的步数对节点有限制就直接将这个点的$DP$值赋成$0$ #incl ...
- Nacos配置中心和服务的注册发现
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...
- .NetCore Docker一次记录
1:项目添加docker支持 2:定位到项目主目录 按住shift,鼠标右键,打开powershell,输入命令 dotnet publish 此时会在目录 bin\Debug\netcoreapp2 ...
- Docker部署spring boot项目
1.打包 将项目打jar包并传到服务器的一个文件夹中,我的是/opt/docker,注意项目中的mysql配置的IP是服务器公网的ip地址 #数据源设置 spring.datasource.usern ...
- Python_进程process 与 线程thread
进程process 与 线程thread 的区别 各个进程独立使用内存空间,(默认)不可互相访问,线程共享内存 进程的子进程是复制一份父进程,线程没有