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

【第二篇】SpringSecurity源码详解

一、SpringSecurity中的核心组件

  在SpringSecurity中的jar分为4个,作用分别为

jar作用
spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面
spring-security-config如果使用Spring Security XML名称空间进行配置或Spring Security的
Java configuration支持,则需要它
spring-security-web用于Spring Security web身份验证服务和基于url的访问控制
spring-security-test测试单元
Authentication :认证对象
// 相关权限信息
Collection<? extends GrantedAuthority> getAuthorities();
// 获取当前用户的凭证
Object getCredentials();
// 获取当前用户的详情
Object getDetails();
// 当前登录的用户对象
Object getPrincipal();
// 判断当前用户的登录状态:true:登录 false:未登录
boolean isAuthenticated();
// 更新用户的认证状态
void setAuthenticated(boolean var1) throws IllegalArgumentException;

Authentication保存在哪了?

​ 在SecurityContextHolder中获取

1.SecurityContextHolder

默认情况下,SecurityContextHolder是通过 ThreadLocal来存储对应的信息的。也就是在一个线程中可以通过这种方式来获取当前登录的用户的相关信息。而在SecurityContext中就只提供了对Authentication对象操作的方法

SecurityContext:容器上下文

// 获取认证对象
Authentication getAuthentication();
// 设置认证对象
void setAuthentication(Authentication var1);

SecurityContextHolder:

// 获取容器上下文
public static SecurityContext getContext()
// 设置容器上下文
public static void setContext(SecurityContext context)

从而可以这样获取到当前登录人信息

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
System.out.println("=========="+userDetails.getUsername());

SecurityContextHolder中可以设置自定义的存储方式

public static final String SYSTEM_PROPERTY = "spring.security.strategy";
private static String strategyName = System.getProperty("spring.security.strategy");
private static SecurityContextHolderStrategy strategy;// 源码,初始化静态方法
private static void initialize() {if (!StringUtils.hasText(strategyName)) {strategyName = "MODE_THREADLOCAL";}// 3种默认的存储方式if (strategyName.equals("MODE_THREADLOCAL")) {// 本地线程中strategy = new ThreadLocalSecurityContextHolderStrategy();} else if (strategyName.equals("MODE_INHERITABLETHREADLOCAL")) {// 父子线程中,可继承strategy = new InheritableThreadLocalSecurityContextHolderStrategy();} else if (strategyName.equals("MODE_GLOBAL")) {// 全局strategy = new GlobalSecurityContextHolderStrategy();} else {try {Class<?> clazz = Class.forName(strategyName);

相关文章:

【第二篇】SpringSecurity源码详解

一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用Spring Security XML名称空间进行配置或Spring Security的Java configura…...

基于Python+FFMPEG环境下载B站歌曲

题主环境 WSL on Windows10 命令如下 # python3.9 pip install --pre yutto yutto --batch https://www.bilibili.com/video/BV168411o7Bh --audio-only ls | grep aac | xargs -I {} ffmpeg -i {} -acodec libmp3lame {}.mp3WinAmp...

静态 VxLAN 浅析及配置示例(头端复制)

一、概念&#xff1a; VxLAN&#xff1a;Visual eXtensible Local Area Network 虚拟扩展本地局域网&#xff0c;一种隧道技术&#xff0c;能在三层网络的基础上建立二层以太网网络隧道&#xff0c;从而实现跨地域的二层互连&#xff0c;VxLAN端口&#xff1a;4789EVPN&#x…...

2023年与2024年AI代理基础设施的演进:六大关键变化

随着人工智能技术的不断进步,AI代理基础设施在2023年和2024年之间经历了显著的发展和变革。本文将探讨这两年间AI代理基础设施的六大关键变化,展示如何为开发者和用户提供更加强大和集成化的解决方案。 1. 代理特定开发工具的兴起 2024年见证了专为AI代理设计的新一代开发工…...

实验三-8086指令的应用《计算机组成原理》

一、实验目的 掌握8086指令的应用 二、实验原理 三、实验仪器 计算机1台&#xff0c;emu8086软件。 四、实验步骤 1、建立00H&#xff5e;0FH&#xff5e;00H 31个数&#xff0c;00H&#xff5e;0FH数据逐渐增大,0FH&#xff5e;00H逐渐减小&#xff0c;即DI指针所表示的地…...

《维汉翻译通》App全新升级:维吾尔语短文本翻译、汉语拼音标注、维语词典、谚语格言名句等功能统统免费!还支持维吾尔文OCR识别提取文字!

2024年《维汉翻译通》App迎来重大更新&#xff01;这次升级不仅带来了全新的功能&#xff0c;还为所有用户提供了更加便捷的服务体验。以下是我们新版本的主要亮点&#xff1a; 维语短文本翻译免费啦&#xff01; 我们深知语言是沟通的桥梁&#xff0c;为了让更多人能够跨越语…...

全年申报!2024年陕西省双软企业认定条件标准、申报好处费用

1.双软企业是什么? 答:双软认证并不是一个资质,而是"软件产品登记"和"软件企业认定"两个不同资质的统称.叫做"双软企业" 2.双软企业的优惠政策是什么? 答:(1)软件产品登记的优惠政策:软件产品增值税,从13%减按3%征收,实行即征即退; (2)软件…...

系统移植 (以将Linux系统移植到S5P6818开发板为例)

&#xff08;本篇文章以将Linux系统移植到S5P6818开发板为例&#xff09; 本文章所需要的文件在下面链接获取&#xff1a;https://download.csdn.net/download/a1547998353/89406544 开发环境搭建 1、安装交叉编译工具链 安装步骤&#xff1a; 1. 在ubuntu的家目录(~)下,创建t…...

超长正整数的加法

一、引言 在计算机科学中&#xff0c;整数加法是一个基础且重要的操作。然而&#xff0c;当面对超长正整数&#xff08;即超出计算机内置整数类型表示范围的整数&#xff09;时&#xff0c;传统的整数加法方法便不再适用。超长正整数通常使用字符串或数组来表示&#xff0c;每…...

C++ - 查找算法 和 其他 算法

目录 一. 查找算法&#xff1a; 1.顺序查找&#xff1a; 2.二分查找&#xff1a; 二. 其他算法&#xff1a; 1.遍历算法&#xff1a; 2.求和、求平均值等聚合算法。 a.求和算法&#xff1a; b.求平均值算法&#xff1a; 一. 查找算法&#xff1a; 1.顺序查找&#xff1…...

字符串的信号(SIGNAL)和槽(SLOT)的宏连接方式弊端

字符串的信号&#xff08;SIGNAL&#xff09;和槽&#xff08;SLOT&#xff09;的宏连接方式在 Qt 4 及早期版本中广泛使用&#xff0c;但这种方法确实存在一些缺点&#xff0c;主要包括以下几点&#xff1a; 类型安全性缺失&#xff1a;由于 SIGNAL 和 SLOT 宏接受的是字符串参…...

Kali linux学习入门

Kali linux学习入门 文章目录 Kali linux学习入门Kali Linux简介Kali Linux工具篇Kali Docker安装Docker 更换国内镜像源Kali 安装 docker compose Kali Linux文档篇Kali Linux 社区篇 Kali Linux简介 Kali Linux是专门用于渗透测试linux操作系统&#xff0c;它由BackTrack发展…...

selenium中,怎么判断是否已选多选框

html文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><p>测试勾选</p><div><input type"checkbox" name"b…...

WindowManager相关容器类

窗口中容器类介绍&#xff1a; 本节内容较多&#xff0c;建议结合前面的内容一起阅读&#xff1a; 1、addWindow的宏观概念 2、WindowManager#addView_1 3、WindowManager#addView_2 1&#xff09;、WindowContainer&#xff1a; class WindowContainer<E extends WindowC…...

零售行业运营有哪些业务场景?详解各业务场景的分析指标和维度

在当今这个数字化迅速发展的时代&#xff0c;零售行业正经历着前所未有的变革。传统的零售模式正在被新兴的技术和创新的业务场景所颠覆&#xff0c;消费者的需求和购物习惯也在不断地演变。零售行业的运营&#xff0c;作为连接消费者、产品和市场的关键环节&#xff0c;对于零…...

无锡哲讯携手SAP,赋能装备制造业数字化转型

在当今快速发展的工业4.0时代&#xff0c;装备制造业作为国民经济的重要支柱&#xff0c;正面临着前所未有的机遇与挑战。无锡哲讯智能科技有限公司凭借其深厚的行业经验和专业的SAP实施能力&#xff0c;为装备制造业提供全面的数字化解决方案&#xff0c;助力企业实现智能化、…...

TPM仿真环境搭建

文章目录 背景及注意事项一、CMake二、m4三、GNU MP Library四、TPM_Emulator五、TSS协议栈&#xff08;trousers-0.3.14.tar.gz&#xff09;六、 tpm-tools七、查看是否安装成功八、测试 TPM环境&#xff08;需要开三个终端分别运行&#xff09;8.1 启动TPM &#xff08;第一个…...

提高篇(五):使用Processing创作互动艺术:从灵感到实现

提高篇(五):使用Processing创作互动艺术:从灵感到实现 引言 互动艺术将观众从被动的观察者转变为主动参与者,通过创意编程和技术手段,让艺术品具备感知和回应的能力。Processing作为一种强大的创意编程工具,提供了丰富的功能和灵活的编程环境,帮助艺术家和设计师实现他…...

华为od-C卷100分题目-3用连续自然数之和来表达整数

华为od-C卷100分题目-3用连续自然数之和来表达整数 题目描述 一个整数可以由连续的自然数之和来表示给定一个整数&#xff0c;计算该整数有几种连续自然数之和的表达式&#xff0c;且打印出每种表达式 输入描述 一个目标整数T(1<T<1000) 输出描述 该整数的所有表达…...

Chrome 自动执行 JS 脚本 | Tampermonkey 插件

文章目录 第 1 步:安装插件 Tampermonkey第 2 步:固定到工具栏第 3 步:在网站上启用 Tampermonkey第 4 步:查看效果第 5 步:调试 JS 代码😂 背景:有个网站,每次进去都要点 3 次才能把相关页面展开。而且,页面经常会自己刷新,导致展开的页面又收回去了。【这一天天的…...

RestClient

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

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...