UsernamePasswordAuthenticationFilter 登录认证

Spring Security源码解析一:UsernamePasswordAuthenticationFilter之登录流程 Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 一.前言 spring security安全框架作为spring系列组件中的一个,被广泛的运用在各项目中,那么spring security在程序中的工作流程是个什么样的呢,它是如何进行一系列的鉴权和认证呢,下面让我们走进源码,从源码的角度来从头走一遍spr 阅读详情

UsernamePasswordAuthenticationFilter本身不是过滤器,而是继承了AbstractAuthenticationProcessingFilter才拥有过滤器的性能。

认证过程如下

一、先判断请求(请求必须是post请求)地址是否为/j_spring_security_check,如果不是,则放行,进入下一个过滤器,是则进行校验。

二、验证用户密码信息并返回Authentication类,在验证过程中如果失败则捕获异常进行处理(执行unsuccessfulAuthentication方法调转到配置中的错误链接),如果验证成功,则将调用SessionAuthenticationStrategy中的方法onAuthentication()判断用户能否重复登陆,是否二次登陆——根据你的配置文件决定,如果用户登陆满足条件则再执行successfulAuthentication(配置中的验证成功链接),如果失败则还是执行unsuccessfulAuthentication方法

详细说明:

1、用户密码认证过程

    AbstractAuthenticationProcessingFilter调用UsernamePasswordAuthenticationFilter中的attemptAuthentication方法,将表单请求的信息(用户、密码等信息)赋值给UsernamePasswordAuthenticationToken(authRequest),然后调用AbstractAuthenticationProcessingFilter中的AuthenticationManager类中的(默认是ProviderManager类)方法——getAuthenticationManager().authenticate(authRequest)对用户密码的正确性进行验证,认证失败就抛出异常,成功就返回Authentication对象。

    AuthenticationManager说明:顾名思义就是认证管理器,用于管理使用什么AuthenticationProvider验证用户的合法性,它拥有2个重要的参数类:

        List<AuthenticationProvider> providers;AuthenticationManager parent

        其中providers是AuthenticationProvider(接口,认证实现者)的集合

         AuthenticationProvider的作用:可以处理一个特定的Authentication,实现身份验证。它有2个方法

         Authentication authenticate(Authentication authentication) throws AuthenticationException;(根据authentication信息实现身份验证)

         boolean supports(Class<?> authentication); 用于判断该AnonymousAuthenticationProvider能够验证某种类型的Authentication

        说明:Authentication可以拥有多种类型,不同的类型使用不同的AuthenticationProvider

        比如DaoAuthenticationProvider支持使用UsernamePasswordAuthenticationToken,AnonymousAuthenticationProvider支持AnonymousAuthenticationToken等

    AuthenticationManager的方法authenticate执行逻辑如下(以DaoAuthenticationProvider为例):

(1)、判断是否有Authentication 对应的AuthenticationProvider,有就执行AuthenticationProvider的authenticate方法,没有就获取父类AuthenticationManager,查看父类中是否有Authentication 对应的AuthenticationProvider,如果也没有则抛出ProviderNotFoundException异常

(2)执行AuthenticationProvider的authenticate方法

        1、根据输入名,查看缓存中是否已经有有用户实体对象,如果有,则对密码重新验证;如果没有,则进行用户的信息验证,及执行DaoAuthenticationProvider中的retrieveUser方法,获取一个UserDetails对象,如果UserDetails对象为null或者获取时出错就抛出异常UsernameNotFoundException或AuthenticationServiceException异常,然后一些属性验证之后,对用户密码进行验证。

        2、给新获取的UserDetails对象放入缓存中

        3、新建一个UsernamePasswordAuthenticationToken一个对象,将authenticated设为true(原来传入的UsernamePasswordAuthenticationToken对象authenticated为false)并返回


2、SessionAuthenticationStrategy.onAuthentication处理过程(主要处理一个用户是否可以同时多次登陆)

    1、checkAuthenticationAllowed方法

     根据maximumSessions和exceptionIfMaximumExceeded的设置判断用户是否多次登陆,是否超过maximumSessions同时登陆了,是否限制用户二次登陆(限制的话则第二次登陆的时候会抛出SessionAuthenticationException异常)还是第二次登陆使第一次登陆无效

    2、复制一个新的session,拥有新的sessionID

   3、更新SessionRegistry中的ConcurrentMap<Object,Set<String>> principals和Map<String, SessionInformation> sessionIds,这个是在第三个过滤器中ConcurrentSessionFilter需要使用的

【SpringBoot 4.x 第162节】登录认证流程源码解析:UsernamePasswordAuthenticationFilter! 🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。 阅读详情

相关推荐

【SpringBoot 4.x 第82节】登录认证流程源码解析:深入理解 UsernamePasswordAuthenticationFilter

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 115

UsernamePasswordAuthenticationFilter

我们前面介绍的账户密码都是指定在我们的xml配置文件中,我们最终还是需要实现和数据库中的数据比较,那么我们就需要自定义认证逻辑的实现。 我们还是一样先进行源码分析,系统认证是通过UsernamePasswordAuthenticationFilter过滤器实现的。 表单提交参数 public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { //...

m0_57560984的博客 4879

Spring Security 认证过程源码分析

我们在前面有了解到可以在application.yml中配置用户名密码,那么可以猜想:肯定是在项目启动的时候加载的,我们通过鼠标点击进入SecurityProperties,我们在User中的getName上打断点,这样项目启动的时候就可以走到这里 之后我们通过点击:Drop Frame可以往回走进入如下方法: 我们进入该类中找到如下方法:loadUserByUsername是登录的时候实际的查询账号密码比对的方法 当我们知道loadUserByUsername方法后,打断点启动项目,登录会发现该方法被调用

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 188

Spring Security入门6:Spring Security的默认配置

Spring Security 是一个强大且灵活的身份验证和授权框架,用于保护 Java Web 应用程序中的资源,它提供了一套丰富的功能,用于处理身份验证、授权、密码编码和会话管理等安全相关的任务。

Designer 小郑的技术博客 2522

【TestNG自动化测试框架详解】

TestNG是一款设计测试用例执行流程的测试框架。

weixin_43936332的博客 1541

工程制图习题集张大庆课后习题答案解析

所以,我想向大家求助,希望能得到一些学习资料、学习方法和学习经验,帮助我更好地理解和掌握这门课程。在寻找学习资料的过程中,我发现了一款叫做资小料的APP,它里面有很多关于工程制图的学习资料,包括视频教程、习题解答和考试真题等。通过使用资小料,我逐渐掌握了工程制图的基本理论和方法,解决了很多学习中遇到的问题。在这里,我想推荐给和我一样在学习《工程制图习题集》这门课的同学们,希望大家也能从这款APP中受益,共同进步。上传者: 『Consentesdei』蒼迷穀。出版社: 清华大学出版社。

weixin_58833001的博客 926

SpringSecurity过滤器UsernamePasswordAuthenticationFilter

简介 UsernamePasswordAuthenticationFilter是AbstractAuthenticationProcessingFilter针对使用用户名和密码进行身份认证而定制化的一个过滤器。其添加是在调用http.formLogin()时作用,默认的登录请求pattern为"/login",并且为POST请求。当我们登录的时候,也就是匹配到loginProcessingUrl,这个过滤器就会委托认证管理器authenticationManager来验证登录 登陆流程入口是Abstrac

clyu的博客 6146

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1563

Spring常用过滤器(Filter)-UsernamePasswordAuthenticationFilter

UsernamePasswordAuthenticationFilter是Spring Security中用于处理用户名和密码登录认证的重要组件。1.1.1 UsernamePasswordAuthenticationFilter是Spring Security提供的一个内置过滤器,专门用于处理基于用户名和密码的登录认证。如果认证成功,AuthenticationProvider会返回一个已认证的Authentication对象,通常包含了用户的信息(如UserDetails的实现)。

Liang的博客 962

Arduino+NRF24L01 无线遥控舵机与无刷电机系统搭建指南

本文详细介绍了使用Arduino和NRF24L01模块搭建无线遥控系统的完整指南,涵盖舵机和无刷电机的无线控制。从硬件选型、电路连接到代码编写与调试,提供了实用技巧和常见问题解决方案,帮助DIY爱好者低成本实现稳定可靠的无线遥控应用。

sre5engineer的博客 588

高效数据迁移:ICCAP到ADS的数据导入与导出实战指南

本文提供了从ICCAP到ADS进行高效、准确数据迁移的实战指南。针对射频与微波电路设计中的关键挑战,详细阐述了迁移前的战略规划、ICCAP数据的精细化导出(包括脚本化批处理)、ADS数据的多种导入方法(如Data Items、DML模型库及编程化API),并强调了数据完整性与准确性验证的重要性,确保模型参数和仿真结果在平台间可靠传递。

weixin_29291185的博客 133

Spring Security学习(二)基本原理、登录认证流程、退出登录流程、权限访问流程

目录登录认证流程分析总体流程局部分析来到 总体流程 中步骤2的attemptAuthentication方法分析UsernamePasswordAuthenticationToken的构造过程attemptAuthentication方法中最后一段代码的分析来到步骤4.2的successfulAuthentication方法退出登录流程权限访问流程ExceptionTranslationFilterFilterSecurityInterceptor 登录认证流程分析 总体流程 默认通过UsernamePas

qq_43644273的博客 931

CTF-Web学习笔记:服务端请求伪造(SSRF)篇

本文系统介绍了CTF比赛中SSRF漏洞的攻防技术。首先解析了SSRF的核心原理,即利用服务器对用户输入URL的未校验缺陷,诱导其访问内网资源。然后详细分析了5类常见CTF题型:文件读取、内网探测、云服务元数据窃取、协议绕过及组合漏洞利用。重点讲解了绕过URL过滤、利用特殊协议(如dict://、gopher://)等实战技巧,并通过一道SSRF+Redis的高阶题目演示完整攻击链。最后给出防御建议:严格校验输入URL、禁用危险协议、实施内网隔离等。

Deng7326的博客 1708

【第六章】Spirng Security表单登录

Spring Security表单登录

单纯的小孩的博客 842

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 450

安川机器人外部轴添加

本文详细介绍了如何在安川机器人本体上添加第7轴以及如何设置动作,本文以添加点焊枪为例进行讲解。

haier123888的博客 7893

Spring Security- 自定义登录验证逻辑(UsernamePasswordAuthenticationFilter)

在现代 Web 应用开发中,安全始终是开发者关注的核心问题之一。Spring Security 作为 Spring 生态中最成熟、功能最强大的安全框架,为开发者提供了开箱即用的认证(Authentication)与授权(Authorization)机制。然而,在实际项目中,我们常常需要根据业务需求对默认的安全流程进行定制,比如实现验证码校验、多因素认证、自定义用户凭证格式、或对接特定的用户存储系统等。本文将深入探讨如何通过扩展来实现完全自定义的登录验证逻辑。

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

qq_31142237的博客 591

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring Security 实战干货:UsernamePasswordAuthenticationFilter 源码分析

1. 前言欢迎阅读Spring Security 实战干货系列文章,在集成Spring Security安全框架的时候我们最先处理的可能就是根据我们项目的实际需要来定制注册登录了,尤其...

码农小胖哥 1913

Spring Security 6 UsernamePasswordAuthenticationFilter 详解

Spring Security 6中的UsernamePasswordAuthenticationFilter是处理表单登录的核心过滤器,主要功能包括拦截登录请求、执行认证流程和管理安全上下文。该过滤器默认拦截POST方式的/login请求,提取用户名密码后创建未认证Token,委托AuthenticationManager完成认证。认证成功后会将Authentication存入SecurityContextHolder,失败则清除上下文。开发者可通过配置自定义登录页URL、字段名等参数,也可通过继承该过滤

csdn_tom_168的博客 1074

SpringSecurity之UsernamePasswordAuthenticationFilter过滤器执行流程

过滤器:UsernamePasswordAuthenticationFilter继承 AbstractAuthenticationProcessingFilter(抽象类) public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { } 核心方法,返回Authentication接口,里面有getAuthorities,getCredentials,get..

VIP006008的博客 1915

【深入浅出Spring Security(三)】默认登录认证的实现原理

思考:发送请求的登录界面是如何来的?用户名和密码为什么是user和一个UUID字符串呢?它又是如何进行用户名和密码验证的呢?得知道 DaoAuthenticationProvider retrieveUser 方法和 additionalAuthenticationChecks 方法(这俩方法分别应用了UserDetailsService和PasswordEncoder对象)。UsernamePasswordAuthenticationFilter 最后也是去通过 ProviderManager 中的 au

qq_63691275的博客 4321

loginform登录表单 vs,如何使用Spring Security / Spring MVC处理表单登录

Simple question, I just need a pointer in the right direction:I have a simple Spring MVC/Spring Security webapp. Initially I set up Spring Security so that the default login page shows and authenticat...

weixin_35260789的博客 95

Spring Security自定义登录验证(不使用userDetailsService)

一:功能说明 实现了自定义登录验证(AuthenticationProvider) 二:具体代码 1.自定义AuthenticationProvider /** * @author LEI * Created by LEI on 2019/5/30. */ @Component public class MyAuthenticationProvider implements A...

云海梦尘的博客 1万+

loginform登录表单 vs_如何使用Spring Security / Spring MVC处理表单登录

Simple question, I just need a pointer in the right direction:I have a simple Spring MVC/Spring Security webapp. Initially I set up Spring Security so that the default login page shows and authenticat...

weixin_42518480的博客 176
上一篇: Java中使用正则表达式
下一篇: InputStream为什么不能被重复读取?
Java_Mr_Zheng
博客等级 码龄11年 18粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值