Spring Security:多个ThreadLocals中有相同的SecurityContext实例,它是如何工作的?

2024-04-01

我有一些关于 Spring Security 3.0.5 和 SecurityContext 的问题。首先,我尝试总结一下我所知道的:

  • SecurityContextHolder 存储 SecurityContext
  • 在Request之间,SecurityContext存储在HttpSession中
  • 请求开始:SecurityContextHolder 从 HttpSession 获取 SecurityContext
  • 请求结束:SecurityContextHolder 将 SecurityContext 放入 HttpSession

  • 在请求期间,在服务器上,SecurityContextHolder 使用 ThreadLocal。应用程序中的任何位置(同一请求)都可以访问 SecurityContext

现在我的问题....

--> 两个请求:SecurityContext 实例将被共享

这是如何运作的?我的意思是,SecurityContextHolder 对每个请求使用 ThreadLocal。 2 个请求 = 2 个 ThreadLocal

每个请求都会:从 HttpSession 获取SessionAttribute (SecurityContext) 如果他们在 SecurityContext 上工作会发生什么?所有 ThreadLocal 中的 SecurityContext 是否都发生了变化?

据我所知:是的(?)

这是如何运作的?他们如何在同一个实例上工作?我的意思是,我真的无法想象具有两个不同 ThreadLocal 的两个不同线程如何在同一个实例上工作?

API(线程本地): 该类提供线程局部变量。这些变量与其正常对应变量的不同之处在于,访问一个变量(通过其 get 或 set 方法)的每个线程都有其自己的、独立初始化的变量副本。

我的意思是,就是这样:复制!也许我错了,两个线程不可能在同一个 SecurityContext 上工作?但 Spring Security 文档是这么说的!

如果有人能向我解释这一点那就太好了:-) 谢谢!


每个线程都有自己的值ThreadLocal,但没有什么可以阻止这些值相等。因此,在这种情况下,多个线程将引用同一个实例SecurityContext.

通常这不是问题,但如果你想修改安全上下文,你可以启用防御性复制,请参阅SEC-356 https://jira.springsource.org/browse/SEC-356.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Security:多个ThreadLocals中有相同的SecurityContext实例,它是如何工作的? 的相关文章

随机推荐

  • 从 ActionBarSherlock 迁移到 ActionBarCompat 时有哪些常见问题?

    我想从我的应用程序中删除 ActionBarSherlock 并将其替换为标准 ActionBarCompat 如何实现 ActionBarCompat 如何迁移活动 哪些导入替代了 ActionBarSherlock 导入 典型问题有哪些
  • 与 C# 4.0 一起使用的最佳 ORM [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 最好的方法是使用像 Nhiberta
  • 带 $ 的 Haskell 偏函数应用

    我是 Haskell 的新手 正在查看一个使用函数应用程序的简单示例 这看起来很简单 它需要一个函数并将其应用于一个值 所以这是有道理的 gt 3 2 5 这也是有道理的 gt 3 2 5 这是有道理的 因为第一个参数是函数 第二个参数是值
  • 存储桶日志文件的 S3 数据分区

    我有一个 s3 存储桶 ABC 并且在此存储桶上启用了日志记录 日志存储在 ABC logs 中 每天 ABC logs 中有许多文件 现在我想逐年分离这些日志 例如 s3 ABC logs year 2015 s3 ABC logs ye
  • ng2-charts 的自定义工具提示

    我正在做一些研究 我想知道是否可以像 Chart js 中那样制作自定义工具提示 但我找不到任何东西 我想在我的工具提示中添加一些 css 我正在使用 Angular5 尝试将其添加到您的图表选项 public barChartOption
  • 表情符号取值范围

    我试图从字符串中取出所有表情符号 就像消毒剂一样 但我找不到完整的表情符号值集 表情符号字符的 UTF16 值的完整集合是什么 Unicode 标准的Unicode 技术报告 51 http www unicode org reports
  • 更改Windows Phone通用应用程序中内容对话框按钮的样式

    我在 xaml 中定义了此内容对话框
  • 防止 python 覆盖范围包含虚拟环境站点包

    我是报道新手 遇到了一个奇怪的问题 我的报道考虑了我的虚拟环境站点包 这是覆盖率运行的输出 coverage run test py Ran 20 tests in 0 060s OK atcatalog jmfrank63 fullsta
  • 无法在 vs2008 中打开 NerdDinner 项目

    NerdDinner csproj 不会在带有 net 3 5 sp1 的 vs2008 sp1 中加载 我是不是对这些工具或其他东西不了解最新的情况 它抱怨此安装不支持此项目类型 您是否安装了 ASP NET MVC 框架 如果没有 你需
  • 将数据帧系列中的分数转换为浮点数

    在 Python 3 x 中 如何将包含分数字符串和 NaN 值的 Dataframe 列转换为浮点数 我尝试了一些方法 但没有找到合适的解决方案 所以如果我有一个数据框 df 它看起来像 a b 0 John 20 1 1 Bob NaN
  • 如何在 R 中获取整数哈希码?

    我想做的是在 R 中实现一个哈希技巧 代码如下 library digest a lt digest key a algo xxhash32 1 4da5b0f8 这返回了字符类型的哈希码 有什么办法可以把它变成整数吗 或者还有其他包可以实
  • 使用 Passport-facebook 从 Facebook 检索照片

    我可以通过 Passport facebook 检索基本用户信息 遵循以下代码并保存在 mongodb 中 app get auth facebook passport authenticate facebook scope email p
  • 从kafka主题中删除单个记录

    有没有办法从kafka主题中删除单个记录 我知道有一个脚本 kafka delete records sh 可以删除指定主题和分区上指定偏移量之前的记录 但我希望能够删除我指定的偏移量上的记录 有没有办法做到这一点 这不是在 Java 上
  • Python 输出格式

    你好 我搜索过输出格式 但格式没有成功 我找不到合适的文档 我真的想了解这段代码是如何工作的 如果有人可以启发我吗 print Survived i 1f len survived float len survived len train
  • 您是否必须 pickle 缩放器和 ML 模型才能部署?

    当使用 sklearn 训练 ML 模型时 我通常使用 sklearn 内置的 StandardScaler 首先将缩放器拟合到训练数据 然后转换训练数据 最后使用相同的 StandardScaler 对象来转换测试数据通过训练数据集中之前
  • \bin 中插入不需要的 SQLite

    我正在使用 Visual Studio 2010 并使用 Web 部署将 Net MVC 站点提升到特定环境 我安装了 Elmah 它在我的 DEV 环境中运行得很好 但是当我推送 TEST 时 我遇到了异常 因为 SQLite 不是一种好
  • Django - 使用子对象过滤查询集(ForeignKey)

    我有 3 个模型 其中 2 个对应第一个模型 class Parent models Model name models CharField class Child1 models Model parent models ForeignKe
  • C 语言中的“{0}”是什么?

    什么是char buf MAXDATASIZE 0 s 0 means 试图打印它 但它什么也没打印 include
  • 检查用户是否使用兼容模式的 IE

    我正在寻找一些代码 PHP 或 JavaScript 可以很好地检查查看页面的用户是否使用兼容模式 然后我可以使用该代码执行一些条件语句 或者基本上给他们一个通知以将其关闭 强迫他们 这将禁用兼容性视图 除非用户随后通过进入开发人员工具并进
  • Spring Security:多个ThreadLocals中有相同的SecurityContext实例,它是如何工作的?

    我有一些关于 Spring Security 3 0 5 和 SecurityContext 的问题 首先 我尝试总结一下我所知道的 SecurityContextHolder 存储 SecurityContext 在Request之间 S