为什么已经有了ThreadLocal,还需要SecurityContextHolder呢?

提出一个问题:

为什么已经有了ThreadLocal,还需要有SecurityContextHolder呢?

1、SecurityContextHolder是什么


先解释一些SecurityContextHolder是什么:是SpringSecurity中的一个核心类。
它的作用是:用来管理当前线程的安全上下文对象。


2、设计出的目的是:


    1、提供了方便的方式访问当前线程。——SecurityContextHolder.getContext()
    2、提供了可靠方式管理安全上下文对象——内部使用ThreadLocal
    3、提供了一种灵活的方式来配置和扩展安全上下文管理机制。


    
3、总结一下


    1、SecurityContextHolder类内部可以理解成一个Thread Local集合
    2、它是一个静态类,可以用来访问不同线程之间的数据
    3、它在ThreadLocal上进行了更高级的封装。


    
通过前面3点已经可以知道为什么要有ThreadLocal了,再提出一个问题,

SecurityContextHolder在ThreadLocal上进行了哪些更高级的封装和管理?


回答:


1、封装获取和设置安全上下文对象的方法。

SecurityContextHolder 提供了静态方法 getContext() 和 setContext() 来获取和设置当前线程的安全上下文对象。这里就可以不需要之间操作ThreadLocal了。

2、自动清空安全上下文对象。

会在特定时机自动清空当前线程中的安全上下文对象。
在使用 @Async 注解或使用线程池时,SecurityContextHolder 会在每个任务或线程执行完成后自动清空安全上下文对象,以避免潜在的线程间数据共享问题。


3、支持多种安全上下文管理策略的切换。

SecurityContextHolder 可以通过配置不同的 SecurityContextHolderStrategy 实现类来支持不同的安全上下文管理策略。默认情况下,它使用 ThreadLocalSecurityContextHolderStrategy,基于 ThreadLocal 来管理安全上下文对象。但也可以根据需要,通过自定义的实现类来支持其他的策略,比如基于 InheritableThreadLocal 或外部存储介质等。


4、提供便捷的安全上下文清空方法。

SecurityContextHolder 提供了 clearContext() 方法,用于清空当前线程中的安全上下文对象。这样,在特定的场景下,我们可以手动清空安全上下文对象,以确保及时释放资源或切换用户身份等需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka3.6.0部署

部署zk https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1.tar.gz tar -xf apache-zookeeper-3.9.1.tar.gz -C /apps cd /apps/ && ln -s apache-zookeeper-3.9.1 zookeeper 修改配置bash grep -vE ^$|^# conf/zo…

buuctf [极客大挑战 2019]Havefun1

解题思路: 小习惯 本题先看看源码或者检查一下,可能这是俺的一个小习惯。 源码里面都看到了php的代码 php代码解析: $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } 1.$ca…

<蓝桥杯软件赛>零基础备赛20周--第8周第2讲--排序的应用

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…

ESP32使用mpu6050以及pid调参

pid //pid参考教程 https://www.xpstem.com/article/10120 #include <MPU6050_tockn.h> #include <Wire.h>MPU6050 mpu6050(Wire);// pid相关参数 unsigned long lastTime; double Input, Output, Setpoint; double ITerm, lastInput; double kp, ki, kd; int Sa…

HTML知识点梳理

em 自动适应用户所使用的字体。元素像素就是指px dp 虚拟像素&#xff0c;在不同的像素密度的设备上会自动适配 align只能用于div &#xff0c;align直接写在是div的属性 &#xff0c;text-align则是Css的属性 &#xff0c;两个属性使用的地方不一样&#xff0c;但是作用一样…

模板可变参数/包装器

一、什么是模板可变参数 1、对比函数可变参数 可变参数即参数的数量是不确定的&#xff0c;底层根据用户传入的数量&#xff0c;开一个数组存储对应的参数。 2、基本形式 args -- argument 参数 [0,n]个参数 // Args是一个模板参数包&#xff0c;args是一个函数形参参数包…

liunx常用指令之清空文件内容

ChatGPT国内站点&#xff1a;海鲸AI 在Linux系统中&#xff0c;可以使用以下命令清空文件内容&#xff1a; 使用重定向符号>将一个空字符串写入文件&#xff0c;这将覆盖文件的内容&#xff1a; > filename使用echo命令将空字符串写入文件&#xff0c;也会清空文件内容&a…

课题学习(十四)----三轴加速度计+三轴陀螺仪传感器-ICM20602

本篇博客对ICM20602芯片进行学习&#xff0c;目的是后续设计一个电路板&#xff0c;采集ICM20602的数据&#xff0c;通过这些数据对各种姿态解算的方法进行仿真学习。 一、 ICM20602介绍 1.1 初识芯片 3轴陀螺仪&#xff1a;可编程全刻度范围(FSR)为250 dps&#xff0c;500 d…

JavaWeb(四)

一、约束的概念和分类 约束是作用于表中列上的规则&#xff0c;用于限制加入表的数据&#xff0c;约束的存在保证了数据库中数据的正确性、有效性和完整性。 1.1、单表约束 利用约束创建表 需要注意的是: 1、主键是一行数据的唯一标识&#xff0c;要求非空且唯一。一张表只能…

使用wininet下载一个网页

WinInet基础知识 | Microsoft Learn //this code excerpt also demonstrates try/catch exception handling #include <afxinet.h> void DisplayHttpPage(LPCTSTR pszServerName, LPCTSTR pszFileName) { CInternetSession session(_T("My Session")); …

Ubuntu20.04安装ROS2

官方参考文章 Ubuntu (Debian) — ROS 2 Documentation: Foxy documentation curl密钥问题 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg curl: (7) Failed to connect to raw.githubus…

DNA模糊匹配(动态规划)

我做动态规划还是少的 只会做那些显而易见的动态规划题&#xff08;这题是看了给出来的解题思路做的&#xff09; 以后可能就会做与这类似的了 代码如下&#xff1a; #include<stdio.h> #include<string.h> int get_min(int a, int b, int c); int min_l[301][…

R语言gWQS包在加权分位数和回归模型的应用

在流行病学研究中&#xff0c;相较于单一因素的暴露&#xff0c;多因素同时暴露的情况更为常见。传统模型在评价多因素联合暴露时存在数据维度高、多重共线性等问题. WQS 回归模型的基本原理是通过分位数间距及加权的方法&#xff0c;将多种研究因素的效应综合成为一个指数&…

LLM大语言模型(一):ChatGLM3-6B试用

前言 LLM大语言模型工程化&#xff0c;在本地搭建一套开源的LLM&#xff0c;方便后续的Agent等特性的研究。 本机环境 CPU&#xff1a;AMD Ryzen 5 3600X 6-Core Processor Mem&#xff1a;32GB GPU&#xff1a;RTX 4060Ti 16G ChatGLM3代码库下载 # 下载代码库 ​git c…

java后端自学错误总结

java后端自学错误总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的参数化…

【中文编码】利用bert-base-chinese中的Tokenizer实现中文编码嵌入

最近接触文本处理&#xff0c;查询了一些资料&#xff0c;记录一下中文文本编码的处理方法吧。   先下载模型和词表&#xff1a;bert-base-chinese镜像下载   如下图示&#xff0c;下载好的以下文件均存放在 bert-base-chinese 文件夹下    1. 词编码嵌入简介 按我通俗的…

编程实战:类C语法的编译型脚本解释器(三)插件(自定义函数)接口

系列入口&#xff1a; 编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 本文讲解插件&#xff08;自定义函数&#xff09;的接口。 下文中的“插件”和“自定义函数”是两个概念&#xff1a; “插件” 提供自定义函数功能的类&#xff…

基于SpringBoot的公益慈善平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 基于SpringBoot的公益…

华为OD机试真题-最长子字符串的长度(一)-2023年OD统一考试(C卷)

题目描述&#xff1a; 给你一个字符串 s&#xff0c;字符串s首尾相连成一个环形 &#xff0c;请你在环中找出 o 字符出现了偶数次最长子字符串的长度。 输入描述&#xff1a; 输入是一串小写字母组成的字符串 输出描述&#xff1a; 输出是一个整数 补充说明&#xff1a; 1 <…

用Python实现石头剪刀布的游戏(扩展)

剪刀石头布是一种划拳游戏&#xff0c;规则是剪刀赢布&#xff0c;布赢石头&#xff0c;石头赢剪刀。假设使用3个整数0、1、2来分别代表石头、剪刀、布。每一局中&#xff0c;计算机随机生成3个整数0、1、2中的一个&#xff0c;用户使用键盘输入0、1、2中的一个整数&#xff0c…