SpringSecurity框架源码解读登录认证流程

应用SpringSecurity+SpringSocial实现登录、第三方登录(原理与源码解读)         SpringSecurity框架简介:SpringSecurity框架基于Spirng框架,为企业级的用户认证,用户授权,安全防护等提供一系列成熟的解决方案。用户的认证是为了让系统知道使用系统的用户是谁,而用户授权是限制用户在系统中都能干些什么,这里只讨论用户的认证这个模块。         SpringSecurity认证原理:往Web应用中注入一组过滤器链,每个过滤器都拦截一... 阅读详情

很多小伙伴 对于SpringSecurity框架 只是知道 用的来,但是面试的时候,叫他或者她说一下 认证或者授权的原理或者流程是怎样的,突然,大部分人一下就开不了口,这样就导致面试的时候,被削减工资 。今天就给大家说说 SpringSecurity的认证原理。

看一下认证流程的流程图 :
在这里插入图片描述
其实 你把这个流程图看懂,基本认证的源码你就知道了。

下面就来分析一下认证的原理 :
小伙伴 还记到 我在类上 配置的 @EnableWebSecurity这个注解吧,点击进去看 有个@EnableGlobalAuthenticaiton这个注解就和认证有关系了。

图片

在进入@EnableGlobalAuthenticaiton 这个注解 看到一个类 AuthenticationConfiguration这个类,这个类就关键了
图片
进入该类 找到 authentication方法(关键方法)

public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (this.delegate != null) {
return this.delegate.authenticate(authentication);
} else {
Object var2 = this.delegateMonitor;
synchronized(this.delegateMonitor) {
if (this.delegate == null) {
this.delegate = (AuthenticationManager)this.delegateBuilder.getObject();
this.delegateBuilder = null;
}
}
return this.delegate.authenticate(authentication);
}
}

在进行 点进去 AuthenticationManager 这里面
public interface AuthenticationManager {
Authentication authenticate(Authentication var1) throws AuthenticationException;
}

小伙伴 请看 这个是不是 上面图的 ,他是一个接口,找到对应的实现类ProviderManager类,这个类维护了一个集合
private List providers; 这个集合就提供很多的认证方式,比如用户名 密码认证 短信认证 等

我们还是看关键的 该了的 authenticate方法,这个是认证方法 ,找到方法里面的
result = provider.authenticate(authentication);代码,在点击进去

最终会点进入 AbstractUserDetailsAuthenticationProvider 类的 authenticate方法,
这个方法的关键代码
user = this.retrieveUser(username, (UsernamePasswordAuthenticationToken)authentication);

进入retrieveUser 方法 就会明白原理了

protected final UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
this.prepareTimingAttackProtection();

try {
//这个方法是不是很熟悉。
UserDetails loadedUser = this.getUserDetailsService().loadUserByUsername(username);
if (loadedUser == null) {
throw new InternalAuthenticationServiceException(“UserDetailsService returned null, which is an interface contract violation”);
} else {
return loadedUser;
}
} catch (UsernameNotFoundException var4) {
this.mitigateAgainstTimingAttack(authentication);
throw var4;
} catch (InternalAuthenticationServiceException var5) {
throw var5;
} catch (Exception var6) {
throw new InternalAuthenticationServiceException(var6.getMessage(), var6);
}
}

到这里 下面的我不用讲了吧,认证就这样的流程,一切都在图中 和 代码中…

注意:如果转载 请标明出处 谢谢… 创作不容易。。。

SpringSecurity(三)基本认证 认证 对于安全管理框架来说,认证共嗯那个可以说是一切的起点,所以我们要从最基本的认证开始,在SpringSecurity中,对认证功能做了大量的封装,我们只需要稍微配置一下就能使用认证功能,也就是因为大量的封装,所以在我们去理解它的逻辑时就显得有些不易了,我们先从最基本的用法开始。 SpringSecurity基本认证 登录表单配置 登录用户数据获取 用户的四种定义方式 基本认证 在SpringBoot中使用SpringSecurity非常方便,创建一个新的SpringBoot项目,我们只需要引入web 阅读详情

相关推荐

SpringSecurity(十一) 登录流程分析(下)

前言 上一篇我们对SpringSecurity登录流程几个重要组件进行了简单的分析,最后遗留下来了一点,这里我们将继续上篇内容讨论。有兴趣的朋友可以看看本专栏的文章。还请不吝赐教。 AbstractAuthenticationProcessingFilter 作为SpringSecurity过滤器链中的一环,AbstractAuthenticationProcessingFilter可以用来处理任何提交给它的身份你认证,我们来用图看看它的工作流程: 上图显示的流程是一个通用的架构。 AbstractAut

陈橙橙 1682

Spring Security简单理解

Spring Security是Spring Framework的安全认证框架,网上有很多相关资料,原先个人研究的时候,网上很多资料只是笼统的介绍了一下整个流程,当自己去实现认证器的时候感觉懵了,本文参考http://www.spring4all.com/article/443 上面很多讲解的都很详细,这里只是补充一些简单的东西 1 Authentication 很多文章都说使用这个接口进行实...

yousun4688的专栏 1139

逆向实战:Soul聊天协议加密与Frida绕过检测

本文详细解析了Soul聊天协议逆向分析的全过程,重点介绍了如何利用Frida绕过应用的反调试检测机制。通过静态分析定位关键SO库,并编写Frida脚本动态Hook线程创建函数,成功实现对抗。文章还进一步追踪了基于DES算法的加密流程,并探讨了协议数据结构的解析方法,为移动应用安全研究提供了实战参考。

2w3e4r5t6y的博客 1132

Django:用户登录authenticate一直校验不通过

基于:Django3.2 classmodels.User 创建用户时,is_active设置为了非活跃账户,导致校验不通过 is_active: 布尔值。指定该用户账户是否应该被视为活跃账户。我们建议你把这个标志设置为 False,而不是删除账户;这样,如果你的应用程序对用户有任何外键,外键就不会被破坏。这不一定能控制用户是否能登录。认证后端不一定需要检查 is_active 标志,但默认的后端(ModelBackend)和 RemoteUserBackend 会检查。如果你想允许不活跃的用户登录.

qq_42539712的博客 1558

AWS入门实践-如何在AWS云上创建一个内外网隔离的生产环境

在 AWS 上建立一个内外网分离的生产环境,可以减少应用服务的暴露面,有效的保证你的应用服务器的安全。通常我们会将web应用放在外网的子网内,数据库服务器等放在内网的子网。我们将按照下图来部署动手实践环境,实现在public subnet的EC2虚拟机可以直接通过互联网可以访问,在Private subnet的EC2虚拟机不能通过互联网直接访问,但是却可以在内部来访问互联网安装应用等等。

weixin_39108752的博客 2994

H265/HEVC视频分层码流分析语义元素解释

一、H265概述 H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行了详细的分析,本文继续从数据处理的角度对H265/HEVC视频码流进行详细分析。 二、H265分层结构 H265的分层结构与H264类似,分为视频编码层(VCL:Video Code Layer)和网络抽象层(NAL

weixin_43876729的博客 9431

Spring Security(学习笔记) -- 密码加密源码分析与防御计时攻击以及RememberMe案例记录!

RememberMe,Security 自带防御计时攻击!

TONGZHOUGONGDU的博客 960

从CentOS迁移到openEuler 24.03 LTS:手把手教你部署Java+MySQL+Redis+Nginx全栈环境

本文详细指导如何从CentOS迁移到openEuler 24.03 LTS,并部署Java+MySQL+Redis+Nginx全栈环境。涵盖系统配置、软件安装、性能优化及环境验证,助力企业级用户高效完成服务器迁移与部署。

weixin_26938645的博客 388

[置顶] cas单点登录出现的重定向循环问题解决方案

先描述下出现的问题,截图如下: 出现该问题的原因可以通过F12查看Network找到,即http和https两个协议开头的url在不停的跳转,最后就出现了上图所示的重定向循环错误,导致页面崩溃。 解决方案很简单:分为两个步骤: 1、制作证书并通过配置让tomcat支持https协议; 2、cas客户端使用的几个url中把相应的http改为https,以及http的8080...

dianti5444的博客 2847

告别‘线束丛林’:手把手拆解车身域控制器(BCM/PEPS/网关)的硬件选型与PCB布局要点

本文深入解析车身域控制器的硬件选型与PCB布局要点,涵盖主控MCU选择、通信接口设计、电源架构优化及EMC设计等关键环节。通过实战案例分享,帮助工程师解决高密度集成带来的电源完整性、热管理和信号隔离挑战,实现更稳定高效的汽车电子系统设计。

weixin_42567279的博客 394

实现端到端加密的WebRTC视频会议终端

需要注意的是,上述示例代码中没有涉及到具体的加密算法和密钥交换过程,而是通过WebRTC API自动处理了加密和密钥交换的细节。然后,我们通过信令服务器将本地SDP发送给对方,并接收对方的SDP。最后,我们将对方的SDP设置为远程描述,并将最终的连接建立起来。最后,我们将对方的SDP设置为远程描述,并建立最终的连接。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。

WaJulia的博客 434

1.spring security认证流程

让我们仔细分析认证过程: 1. 用户提交用户名、密码被SecurityFilterChain中的 UsernamePasswordAuthenticationFilter 过滤器获取到, 封装为请求Authentication,通常情况下是UsernamePasswordAuthenticationToken这个实现类。 2. 然后过滤器将Authentication提交至认证管理器(AuthenticationManager)进行认证,然后交给DaoAuthenticationProvider委托..

weixin_45974277的博客 5283

博途S7-1500T 使用工艺对象驱动液压轴(含SimaHydTO库)

利用工艺对象控制液压轴位置含PLC控制和仿真程序文档资料下载地址如下:液压比例伺服阀的相关应用知识请参看下面的博客文章:液压位置闭环控制(比例伺服阀应用)_RXXW_Dor的博客-优快云博客。

RXXW_Dor的博客 2899

Spring Security 分享会

本篇是公司内部每周组织的技术分享会讲解内容,由本人分享,主要分享源码层面登录流程,也涉及如何实现一个登录需求(比较傻瓜式),还包括一些授权控制的讲解等等。

技术分享,读书笔记,面试宝典,算法积累,应有尽有~ 753

2026 Claude Code 标准化前端UI SKILL——Frontend Design

是 Anthropic 官方开源的技能包,在 Claude 官方插件站中排名第一,超过 52k 的下载量。场景推荐方案快速体验批量安装官方 Skills深度设计策略叠加完整打磨流程集成终端跑claude一句话总结:Frontend Design 不是给 AI 加新能力,而是给 AI 加审美标准。它让 AI 从“能画”变成“会设计”——先想清楚风格,再动手写代码。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 3609

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringSecurity 认证流程源码详细解读

如果这些校验都通过,就会将 result 返回。没错,他就是在套娃!点进入去之后,我们来到了 AuthenticationManager 接口,但这只是一个接口,显然不是我们要的,具体的实现代码应该在实现类中,所以我们继续选择 ProviderManager ,他是 AuthenticationManager 接口的一个实现类。点进去,发现这是 AbstractUserDetailsAuthenticationProvider 接口中的方法,而且只有一个实现,那我们继续进入实现类实现的方法。

m0_51431003的博客 2197

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SpringSecurity权限管理框架系列(二)-Spring Security框架实现用户登录认证流程详解

1、Spring Security登录认证的核心 Spring Security框架完成用户登录认证的核心就在与org.springframework.security.core.userdetails包下的UserDetailsService接口 2、UserDetailsService接口详解 2.1 UserDetailsService接口的定义 UserDetailsService接口只有一个抽象方法就是loadUserByUsername(String username), UserDetail

最爱嫣夜来 1967

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SpringBoot集成SpringSecurity(二) 登录认证流程解析

需求 公司打算重构权限系统,主要因为现有的系统存在这些问题: 查询用户步骤繁琐:选系统(主要是这一点)——用户名——查询按钮; 简化权限只分配到角色:现在权限全部汇总到一起,不知道权限从何而来; 角色承担职责过多,杂而乱; 登录名不唯一,无账号找回功能 … 总之就是一个很乱的权限系统,考虑到security的强大功能,灵活易拓展(各种自定义),耦合性低,所以打算用security去是实现。 上...

罗伯特是疯子丶 3130

【读源码】SpringSecurity为什么要这么配置?SpringSecurity判断登录源码解读

SpringSecurity判断登陆状态源码解读!

就很有趣的博客 1182

认证流程源码解析

对于前面几篇的学习应该能学到很多的功能点,但也只是知道如何实现而已,关于底层完全是个黑盒状态,而且对于这些知识点都很碎片化,这一篇就来解析一下认证流程的底层源码,将整个认证流程串联起来。

技术分享,读书笔记,面试宝典,算法积累,应有尽有~ 1147

SpringSecurity ,oAuth2.0 从入门到源码精通 之 (四)spring security 的 认证流程、权限验证流程源码解读

(我将我的 Spring Security 专栏地址放在这里,供大家参考,后面会持续更新: SpringSecurity ,oAuth2.0 从入门到源码精通 ,希望可以帮助到正在学习 Spring Security 和 oAuth2.0 的小伙伴)。 经过前面三篇文章的学习,我想大家应该已经很熟悉 Spring Security 在 Spring Boot 中的基本使用了,相信大家肯定也不会满足于此,所以今天我们就一起来讨论一下 Spring Security 的源码,让我们不仅会使用 Spring Se

llk15884975173的博客 747

【SpringSecurity系列02】SpringSecurity 表单认证逻辑源码解读

概要 前面一节,通过简单配置即可实现SpringSecurity表单认证功能,而今天这一节将通过阅读源码的形式来学习SpringSecurity是如何实现这些功能, 前方高能预警,本篇分析源码篇幅较长。 过滤器链 前面我说过SpringSecurity是基于过滤器链的形式,那么我解析将会介绍一下具体有哪些过滤器。 Filter Class 介绍 SecurityContextPe...

余空啊的博客 473

SpringSecurity实战(五)-认证流程源码分析

文章目录目标认证流程总结 目标 了解Spring Security的认证流程 参考:Spring Security 实战书籍 SpringSecurity使用JustAuth扩展第三方登录 推荐阅读 尽管创建了自己的实现,但仍创建了额外的DaoAuthenticationProvider Spring boot + Spring Security 多种登录认证方式配置(一) 使用redis时遇到的一些异常 在第一篇已经简单说明了,认证授权的简单流程和概念,本文详细介绍一下,在认证流程中,具体执行了

qq1164014750 626

SpringSecurity主要流程及扩展实现

SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。个人理解就是一个用户请求过来,过滤器就像漏斗一样进行层层筛选,直到检验用户请求合法则放通否则失败。

imVainiycos的博客 1197

SpringSecurity 源码解析 | 加JWT 实战 之 登录认证源码解析

登录认证 对于登录认证是什么东西,这个就不用详解说了吧,在企业研发中,用户登录系统不单单简单的传递一个密码过来对比下,ok了就进入系统。一般来说为了在企业研发中,都会对此流程进行加强操作,比如密码的加密处理,用户是否过期,用户是否被停用了等等。但总结来说,目的都是一样,认证用户的信息。 SpringSecurity框架就是帮我们实现了这样的流程功能的框架(这里只说登录认证)。 稍微接触点SpringSecurity都知道,只要加入了SpringSecurity的依赖,访问api都会先进入...

qq_31142237的博客 591

SpringSecurity学习笔记——SpringSecurity底层原理

五、SpringSecurity底层原理 1、SpringSecurity过滤介绍 SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链。 现在对这条过滤器链的 15 个过滤器进行说明: WebAsyncManagerIntegrationFilter:将 Security 上下文与 Spring Web 中用于处理异步请求映射的 WebAsyncManager 进行集成。 SecurityContextPersistenceFilter:在每次请求处理之前将该请求相关的安全上

一名蒟蒻的博客 1863
上一篇: idea断点调试代码-程序员必须掌握技能
下一篇: jquery获取元素下面的所有指定元素
MarkCoder
博客等级 码龄6年 532粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值