当前位置: 首页 > news >正文

五、Spring Boot集成Spring Security之认证流程2

一、Spring Boot集成Spring Security专栏

一、Spring Boot集成Spring Security之自动装配

二、Spring Boot集成Spring Security之实现原理

三、Spring Boot集成Spring Security之过滤器链详解

四、Spring Boot集成Spring Security之认证流程

五、Spring Boot集成Spring Security之认证流程2

二、概要说明

  1. 上文已详细介绍了四、Spring Boot集成Spring Security之认证流程
  2. 本文则着重介绍用户名密码认证过滤器UsernamePasswordAuthenticationFilter的实现原理过程
  3. 认证管理器(authenticationManager)
  4. 认证提供者(AuthenticationProvider)
  5. 自定义配置用户名密码实现(UserDetailsService)

三、UsernamePasswordAuthenticationFilter

1、结构及作用

  1. 继承AbstractAuthenticationProcessingFilter
    1. 初始化请求地址
    2. 初始化authenticationManager
    3. 初始化successHandler
    4. 初始化failureHandler
    5. 实现过滤器入口doFilter方法
    6. doFilter方法调用抽象方法attemptAuthentication,attemptAuthentication供子类实现完成用户名密码验证业务
    7. 认证成功时更新安全上下文,并调用successHandler.onAuthenticationSuccess
    8. 认证失败时删除安全上下文,并调用failureHandler.onAuthenticationFailure
  2. 实现attemptAuthentication方法
    1. 从请求中获取用户名密码
    2. 生成未认证的Authentication
    3. 调用authenticationManager的authenticate方法完成用户名密码验证

image-20241014165945990

四、认证管理器(AuthenticationManager)

1、作用

  1. 完成Authentication的认证

2、ProviderManager(默认实现)

  1. ProviderManager实现AuthenticationManager接口
  2. AuthenticationManager的作用的是完成Authentication的认证
  3. 但是ProviderManager并未直接完成Authentication的认证
  4. 而是提供一个AuthenticationProvider集合
  5. 遍历AuthenticationProvider集合来完成Authentication的认证
  6. 当需要多种认证方式时,可以注册自定义的AuthenticationProvider,后续介绍注册方式

image-20241014170423837

五、AuthenticationProvider

1、作用

  • 调用接口获取用户信息UserDetails
  • 验证用户及密码是否可用

2、DaoAuthenticationProvider(默认实现)

  1. DaoAuthenticationProvider继承AbstractUserDetailsAuthenticationProvider实现AuthenticationProvider接口
  2. 调用retrieveUser方法获取用户信息UserDetails
    1. 调用userDetailsService.loadUserByUsername获取用户信息UserDetails
  3. 验证用户是否存在并可用,不存在或者不可用时抛异常(过期、锁定、启用)
  4. 验证密码是否可用,不可用时抛异常(为空、过期)
  5. 使用密码加密器校验密码(界面输入的密码和数据库已加密的密码)
  6. 密码不一致时抛异常

image-20241014171138597

六、UserDetailsService

1、作用

  • 通过用户名username获取用户信息UserDetails
  • 返回用户信息UserDetails

2、InMemoryUserDetailsManager(默认实现)

  1. 项目启动时会默认生成一个用户名密码,存在内存中
  2. 通过用户名获取该用户并返回

3、推荐实现:自定义UserDetailsService

  1. 通过用户名从数据库中获取到用户
  2. 数据库用户转为UserDetails,数据库中未设置的属性像是否启用、账号未过期、密码未过期、账号未锁定直接设置为true即可
package com.yu.demo.service.impl;import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;@Service
public class UserDetailsServiceImpl implements UserDetailsService {//@Autowired//private UserService userService;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {//TODO 通过username从数据库中获取用户,将用户转UserDetails//User user = userService.getByUsername(username);//return new User(username, user.getPassword(), user.getEnable(), user.getAccountNonExpired(), user.getCredentialsNonExpired(), user.getAccountNonLocked(), user.getAuthorities());//{noop}不使用密码加密器,密码123的都可以验证成功return new User(username, "{noop}123", true, true, true, true, AuthorityUtils.NO_AUTHORITIES);}
}

image-20241014175236518

相关文章:

五、Spring Boot集成Spring Security之认证流程2

一、Spring Boot集成Spring Security专栏 一、Spring Boot集成Spring Security之自动装配 二、Spring Boot集成Spring Security之实现原理 三、Spring Boot集成Spring Security之过滤器链详解 四、Spring Boot集成Spring Security之认证流程 五、Spring Boot集成Spring Se…...

接口测试(全)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程&#xff0…...

【学习】word保存图片

word中有想保存的照片 直接右键另存为的话,文件总是不清晰,截屏的话,好像也欠妥。 怎么办? 可以另存为 网页 .html 可以得到: 原图就放到了文件夹里面...

【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题

一、组件简介和问题描述 SkyWalking 简介 Apache SkyWalking 是一个开源的 APM(应用性能管理)工具,专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能,帮助开发者快速定位和解决性能瓶颈和故障。…...

三勾软件/ java+springboot+vue3玖玖云电商ERP多平台源码

玖玖云ERP系统、支持多平台订单同步,仓库发货,波次拣货,售后服务,电商ERP一站式解决方案 项目介绍 玖玖云ERP系统基于javaspringbootelement-plusuniapp打造的面向开发的电商管理ERP系统,方便二次开发或直接使用。主…...

020 elasticsearch7.10.2 elasticsearch-head kibana安装

文章目录 全文检索流程ElasticSearch介绍ElasticSearch应用场景elasticsearch安装允许远程访问设置vm.max_map_count 的值 elasticsearch-head允许跨域 kibana 商品数量超千万,数据库无法使用索引 如何使用全文检索: 使用lucene,在java中唯一…...

基于SpringBoot+Vue的蜗牛兼职网的设计与实现(带文档)

基于SpringBootVue的蜗牛兼职网的设计与实现(带文档) 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue等工具:IDEA/Ecilpse、Navicat、Maven 该系统主要分为三个角色:管理员、用户和企业,每个角色都有其独特的功能模块,以满…...

Linux 命令 chown 和 chmod 的区别

Linux 命令 chown 和 chmod 的区别 chown的作用:更改文件或目录的所有者和所属用户组chmod的作用:更改文件或目录的访问权限 chown的作用:更改文件或目录的所有者和所属用户组 $ chown [options] user:group file_pathuser:新文件…...

盘点慢查询原因及优化方法

目录 一,前言二,准备 type重点看 三,慢查询原因和解决 1,sql未加索引2,索引失效3,limit深分页问题 (1)limit深分页为什么会慢(2)深分页优化 4,in…...

【热门】智慧果园管理系统解决方案

随着科技的进步,原有农业种植方式已经不能满足社会发展的需要,必须对传统的农业进行技术更新和改造。经过多年的实践,人们总结出一种新的种植方法——温室农业,即“用人工设施控制环境因素,使作物获得最适宜的生长条件,从而延长生产季节,获得最佳的产出”。这种农业生产方式…...

torch.nn.Sequential介绍

torch.nn.Sequential 是 PyTorch 中一个模块容器,用于将一系列层或模块按顺序连接在一起,简化前向传播过程。在 Sequential 中,所有的子模块会按照添加的顺序被执行,适合那些有明确顺序的神经网络结构,比如卷积神经网络、全连接网络等。 主要特点 按顺序执行: 将多个子模…...

使用verilog设计实现的数字滤波器(低通、高通、带通)及其仿真

以下是一个简单的使用Verilog设计数字滤波器(以有限脉冲响应(FIR)滤波器为例,实现低通、高通、带通滤波器)的基本步骤和代码框架: 一、FIR滤波器原理 FIR滤波器的输出 y [ n ] y[n] y[n] 是输入信号...

KPaaS集成平台中怎么创建数据可视化大屏

KPaaS集成平台的数据可视化大屏是什么? 在KPaaS业务集成扩展平台中,数据大屏是一种数据可视化展示工具,它可以帮助企业将复杂的数据以直观、易理解的方式呈现出来,从而提高数据的可读性和价值。数据大屏的主要特点包括&#xff1…...

深度学习:网络压缩(Network Compression)详解

网络压缩(Network Compression)详解 网络压缩是一种旨在减小深度学习模型大小,提高其运行效率和降低计算资源消耗的技术。在移动设备和嵌入式系统等资源受限的环境中,网络压缩尤为重要。它允许这些设备利用现有的深度学习技术&am…...

Go pprof性能分析

pprof是Go语言内置的性能分析工具,它可以帮助我们分析程序的CPU使用情况、内存分配等。 pprof 包含两部分: Go语言内置的两个包 net/http/pprof 对 runtime/pprof 的二次封装,一般是服务型应用。比如 web server ,它一直运行。这…...

扬帆出海!九章云极DataCanvas公司惊艳亮相迪拜GITEX Global 2024

近日, 第44届GITEX GLOBAL展会(GITEX GLOBAL 2024)及全球领先的创业与投资盛会Expand North Star 2024在迪拜盛大启幕。九章云极DataCanvas公司惊艳亮相盛会,向全球观众展示智算领域最新研发进展与创新成果,在国际舞台…...

Qt | 元对象+元枚举+Qt自带图标案例

点击上方"蓝字"关注我们 01、QMetaObject >>> QMetaObject 是 Qt 中用于反射的一个类,提供了有关类的信息,包括属性、信号和槽等。它是 Qt 的元对象系统的核心部分,允许您在运行时获取有关 Qt 对象的详细信息。这种功能在使用 Qt 的信号与槽机制、属性系…...

linux升级cmake

如果出现如下报错,就应该升级cmake了! CMake Error at CMakeLists.txt:1 (cmake_minimum_required): CMake 3.1 or higher is required. You are running version 2.8.12.2 -- Configuring incomplete, errors occurred! 官网 可以下载各个版本的cma…...

ip a查看网卡接口信息

ip a命令是用于查看和管理网络接口信息的命令。通过执行ip a命令,可以查看当前系统上所有网络接口的配置信息,包括IP地址、子网掩码、网关、MAC地址等。该命令还可以用于配置网络接口的参数,如设置IP地址、启用或禁用接口等操作。 # ip a 1:…...

centos celery 日志管理

celery经常会产生大量日志,长时间累计下来会对服务器造成一定的压力 1 配置 logrotate 进行日志拆分 logrotate 是 Linux 系统中常用的日志管理工具。我们将使用它来管理 Celery 的日志文件,确保日志文件不会无限增长,并定期拆分、归档和删…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...