SecurityContextHolder 提供错误的用户详细信息

2024-01-04

在我的应用程序中,我们正在捕获每笔交易的用户详细信息SecurityContextHolder认证对象。

但它给出了错误UserID它似乎。以下是代码片段供您参考。

安全上下文.xml

弹簧安全-3.2 --

<security:http auto-config="true">
    <!-- Restrict URLs based on role -->
    <security:headers>
        <security:cache-control/>
        <security:content-type-options/>
        <security:frame-options policy="DENY"/> 
        <security:xss-protection/> 
    </security:headers>
    <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <security:intercept-url pattern="/logoutSuccess*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <security:intercept-url pattern="/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <security:intercept-url pattern="/web/forgotPwd/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <security:intercept-url pattern="/web/**" access="ROLE_USER" />
    <security:form-login login-page="/login.html" default-target-url="/web/landing/homePage.html"
        always-use-default-target="true" authentication-failure-handler-ref="exceptionTranslationFilter" />
    <security:logout delete-cookies="JSESSIONID" invalidate-session="true"
        logout-success-url="/logout.html" />
    <security:session-management session-fixation-protection="newSession"  invalid-session-url="/login.html?login_error=sessionexpired" session-authentication-error-url="/login.html?login_error=alreadyLogin">
                <security:concurrency-control max-sessions="1" expired-url="/login.html?login_error=duplicateOrsessionexpired" error-if-maximum-exceeded="false" />
    </security:session-management>
    <security:csrf />
    <security:remember-me token-repository-ref="remembermeTokenRepository" key="myAppKey"/>


</security:http>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider user-service-ref="userDetailsServiceImpl">
        <security:password-encoder ref="passwordEncoder" />
    </security:authentication-provider>
</security:authentication-manager>

<bean id="rememberMeServices"
    class="org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices">
    <constructor-arg value="myAppKey" />
    <constructor-arg ref="userDetailsServiceImpl" />
    <constructor-arg ref="remembermeTokenRepository" />
    <property name="alwaysRemember" value="true" />
    <property name="useSecureCookie" value="true" />
</bean>

<bean id="rememberMeFilter"
    class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">
    <property name="rememberMeServices" ref="rememberMeServices" />
    <property name="authenticationManager" ref="authenticationManager" />
</bean> 

<bean id="rememberMeAuthenticationProvider"
    class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
    <property name="key" value="myAppKey" />
</bean>

<bean id="exceptionTranslationFilter"
    class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
    <property name="exceptionMappings">
        <props>
            <prop key="org.springframework.security.authentication.BadCredentialsException">
                /login.html?login_error=BadCredentials
            </prop>
            <prop key="org.springframework.security.authentication.CredentialsExpiredException">
                /login.html?login_error=CredentialsExpired
            </prop>
            <prop key="org.springframework.security.authentication.LockedException">
                /loginModule/loginfailed.do??errorMessage=Locked
            </prop>
            <prop key="org.springframework.secuirty.authentication.DisabledException">
                /login.html?login_error=Disabled
            </prop>
        </props>
    </property>
</bean>

<bean id="passwordEncoder" class="org.jasypt.springsecurity3.authentication.encoding.PBEPasswordEncoder">
    <property name="pbeStringEncryptor">
        <ref bean="defaultStringEncryptor" />
    </property>
</bean>

Code:

public static String getId() {
    Authentication auth = curityContextHolder.getContext().getAuthentication();

    if (auth != null) {
        Object principal = auth.getPrincipal();

        if (principal instanceof UserWithId) {
            return ((UserWithId) principal).getUserid();
        }
    }

    return null;
}

任何帮助,将不胜感激。提前致谢

Update:

发生的场景是:

  1. 用户登录并执行一些事务 101: 对于事务 101:userId from SecurityContextHolder是用户A

  2. 同时,用户登录到其他会话并执行一些事务 103:对于事务 103:userId from SecurityContextHolder是用户B

  3. UserA 再次执行一些 transaction106: 对于 transaction106:userId from SecurityContextHolder使用而不是 UserS


None

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

SecurityContextHolder 提供错误的用户详细信息 的相关文章

  • 配置 Eclipse 将 App Engine 类预先捆绑到单个 JAR 中以加快预热速度

    在与另一家同样使用 App Engine 的公司的同事进行讨论后 他告诉我 他通过以下步骤成功地将应用程序预热时间从约 15 秒缩短到约 5 秒 配置 Eclipse 将编译过程中生成的类捆绑到单个 JAR 文件中 配置 Eclipse 以
  • Java 比 Xmx 参数消耗更多内存

    我有一个非常简单的 Web 服务器类 基于 Java SEHttpServer class 当我使用此命令启动编译的类来限制内存使用时 java Xmx5m Xss5m Xrs Xint Xbatch Test 现在如果我使用检查内存top
  • 在 Gradle 中运行自定义测试任务而无需重新编译

    我有一个 Gradle 自定义测试任务来运行我的集成测试 我希望能够在 Gradle 不自动完成之前的所有阶段并仅运行测试的情况下运行它 有没有办法在每个构建步骤不使用 x 的情况下执行此操作 None
  • 将 java 方法参数设置为最终参数

    那有什么区别final在下面的代码之间进行 将参数声明为有什么好处final public String changeTimezone Timestamp stamp Timezone fTz Timezone toTz return pu
  • 调试器不会停止在 Intellij IDEA 中的源代码处

    我有一个相当奇怪的问题 无法使用 Intellij IDEA 解决 我正在解析电子邮件文件org apache james mime4j包裹 但我的邮件文件格式不兼容Date 标头 因此 我从 mime4j 源创建了模块 并从磁盘中删除了
  • 将更改(永久)保存在数组列表中?

    那可能吗 例如 用户将新的项目 元素添加到数组列表 缓冲读取器进程 中 并且肯定会发生更改 我的问题是 即使用户多次更改数组列表 它也可能会永久存在 即使他们关闭程序并再次打开它 它也会一直存在 注意 不使用 txt 很抱歉问这样的问题 但
  • 内部/匿名类的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 匿名类和静态内部类的最佳实践 设计和性能方面 是什么 就我个人而言 我认为静态内部类提供了更好的封装 并且应该提供更好的性能 因为它们无法访问类
  • 如何使用Gson将JSONArray转换为List?

    在我的 Android 项目中 我试图将收到的 JSONArray 转换为列表 在 的帮助下这个答案 https stackoverflow com questions 8371274 how to parse json array in
  • 如何在不冒 StackOverflowError 风险的情况下使用 CompletableFuture?

    我想遍历异步函数的搜索空间 我将逻辑编码如下 Assuming that a function maps a range of inputs to the same output value minimizes the input valu
  • 在休眠搜索中使用现有分析器AnalyzerDiscriminator

    Entity Indexed AnalyzerDefs AnalyzerDef name en tokenizer TokenizerDef factory StandardTokenizerFactory class filters To
  • String.intern() 线程安全吗

    我想在Java中使用 String intern 来节省内存 对具有相同内容的字符串使用内部池 我从不同的线程调用这个方法 这是个问题吗 对你的问题的简短回答是肯定的 它是线程安全的 但是 您可能需要重新考虑使用此工具来减少内存消耗 原因是
  • 更改JavaFX TableView字体大小[重复]

    这个问题在这里已经有答案了 您好 我想在表视图列内的文本上设置字体 我如何用 Java 做到这一点 这是我的代码 感谢帮助 private final TableView
  • 用二进制数、常规数字和格雷编码填充矩阵

    我有一个包含 1 s 或 0 s 的矩阵 用于创建二进制数 其宽度为n 对于 n 2 和 n 3 它看起来像 00 000 01 001 10 010 11 011 100 101 110 111 等等 现在我正在使用以下代码来生成它 in
  • 为什么我无法使用 HttpUrlConnection 上传第一个文件块?

    在我的项目中 我应该从一台服务器逐块下载文件 并将每个块立即上传到另一台服务器 我有一个应该下载的文件的 URL 我们就这样称呼它吧downloadUrl 因此 这就是我逐块下载文件的方式 val chunkSize 1024 1024 B
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • Java泛型类型参数中的问号是什么意思? [复制]

    这个问题在这里已经有答案了 这是取自斯坦福解析器附带的一些示例的一小段代码 我已经用 Java 进行了大约 4 年的开发 但从未对这种风格的代码应该表示什么有非常深入的理解 List
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 原子整数的compareandexchange()与compareandset()

    在研究 AtomicInteger 时 我发现这个 API 提供了两种方法 比较和交换 如果当前值被引用 则自动将该值设置为 newValue to 作为见证值 预期值 记忆效应为 由指定VarHandle compareAndExchan
  • 如何将元素添加到通用集合

    我想知道如何将专用对象添加到通用集合中 我正在使用以下代码 Collection

随机推荐

  • 处理 argparse 冲突

    如果我导入一个Pythonmodule https github com paulcalabro api kickstart blob master examples python config py已经在使用argparse 但是 我想用
  • 按具有自定义排序优先级的列对数组的数组进行排序(不按字母顺序)

    假设我有这个数组 array array array id gt 7867867 animal gt Dog array id gt 3452342 animal gt Lion array id gt 1231233 animal gt
  • PySpark:当列是列表时向 DataFrame 添加列

    我读过类似的问题 但找不到解决我的具体问题的方法 我有一个清单 l 1 2 3 和一个数据框 df sc parallelize p1 a p2 b p3 c toDF product name 我想获得一个新的 DataFrame 其中列
  • struts 2 中的 beans 属性和 modelDriven

    我是 struts 2 的新手 我创建了一个操作类 它使用以下命令将数据从 JSP 页面插入到 beanModelDriven界面 问题是我有一些非 字符串 properties in the bean likeLong 日期 等 问题是
  • Chrome 多次发送请求

    我有一个 Rails 3 应用程序 刚刚注意到当使用 Chrome 在 Mac 上 访问该应用程序时 网站上的每个页面都会被请求两次 这发生在开发和生产中 Heroku Firefox 和 Safari 仅发送一次请求 即使我删除该操作的所
  • Pandas:将一系列字典保存到磁盘

    我有一个 python pandas 系列词典 id dicts 1 5 1 8 20 1800 2 2 2 2 8 1 1000 25 1651 1 20000000 2 1 10 20 字典中的 key value 代表 feature
  • Ant 公然忽略 JAVA_HOME 环境变量

    我刚刚获取了最新版本的 Android SDK 并开始尝试使用它 与几乎其他人提出这个问题不同 我运行的是 Linux 即 Linux Mint 13 我目前正在尝试使用 ant 编译一个 Hello World 程序 通过安装 sudo
  • HeaderViewListAdapter 随机崩溃

    我在 crashlytics 中遇到随机崩溃 但无法模拟它 它在 Android V2 和 V4 上都会随机崩溃 但是非常非常罕见 java lang IndexOutOfBoundsException Invalid index 3 si
  • CLion 在运行可执行文件时找不到共享库

    我正在做一个项目 到目前为止 我一直在使用一个简单的编辑器和我自己的 Makefile 来构建它 不过 我想切换到 CLion 根据这个问题 https stackoverflow com questions 26918459 using
  • 使用 XMLHttpRequest 发送 POST 数据

    我想在 JavaScript 中使用 XMLHttpRequest 发送一些数据 假设我有以下 HTML 表单
  • 在我的笔记本电脑上运行 MPI 代码

    我是并行计算世界的新手 你能告诉我是否可以在我的双核笔记本电脑上使用 MPI 例程运行 C 代码 或者是否有任何模拟器 仿真器可以做到这一点 大多数 MPI 实现使用共享内存在位于同一主机上的队列之间进行通信 设置笔记本电脑不需要任何特殊操
  • Spring Boot 中用户主目录的环境特定属性

    我正在开发一个 Spring Boot 应用程序 我必须在其中设置Environment specific properties从用户主文件夹 我在 Google 上找到了同样的结果 发现我们可以将不同的属性文件 开发 测试 生产 放在资源
  • COM 无法启动编译为 AnyCPU 的进程外 .Net 服务器

    我正在尝试让 COM 启动我的进程外 NET COM 服务器 如果服务器进程是用 x64 编译的 它就可以工作 但如果我使用 AnyCPU 这就是我想要的 那么它会挂起一段时间 最终失败并显示 0x80080005 CO E SERVER
  • 如何向 VisualVM 提供 JVM 参数?

    我使用 JDK 1 6 0 26 中的 VisualVM 来分析在 Tomcat 下运行的 Java Web 应用程序 但 VisualVM 经常告诉我它没有足够的内存来拍摄快照 并使用 Xmx 开关为 Netbeans 提供更多内存 问题
  • appcompat_v7 abc_activity_chooser_view.xml 中的重复 id @+id/image:58

    创建 apk 时出现以下错误 重复的 id id image 已在此布局中先前定义 abc activity chooser view xml 布局中的 58 appcompat v7 于是我就清理了一下 还是这样 该文件中确实存在重复的
  • 括号检查器代码的测试用例不正确。对于“(()”输出应该是“不平衡”,但我正在“平衡”[重复]

    这个问题在这里已经有答案了 给定一个表达式字符串 exp 检查是否是对和顺序 表达式中是正确的 例如 程序应该打印 balanced for exp and not balanced for exp Input 输入的第一行包含一个整数 T
  • 根据 ocr 图像结尾的段落将字符串拆分为列

    我正在开发一个项目 将打字机写的战争日记笔记从 PDF 扫描转换为文本 我可以成功地 对于原始的未调整大小的文件 可能是 90 提取我首先裁剪的主要文本 Reprex 数据 您可以从头开始尝试使用图像或我在下面提供的文本 我的挑战是保持文本
  • AngularJS:将对象从指令传递到控制器

    在我的指令中 我正在实例化一个对象 我想将此对象传递到与该指令关联的控制器的范围 我怎么做 请记住 这是一个独立的代码 供您理解该问题 在实际问题中 它无助于在控制器内部实例化该对象 我知道指令中的范围对象用于传递 HTML 中指定的值 我
  • 如何在运行单元测试时获取目录

    您好 当运行我的单元测试时 我想要获取我的项目正在运行的目录以检索文件 假设我有一个名为 MyProject 的测试项目 我运行的测试 AppDomain CurrentDomain SetupInformation Application
  • SecurityContextHolder 提供错误的用户详细信息

    在我的应用程序中 我们正在捕获每笔交易的用户详细信息SecurityContextHolder认证对象 但它给出了错误UserID它似乎 以下是代码片段供您参考 安全上下文 xml 弹簧安全 3 2