java - Spring Security 中奇怪的对象类型更改

标签 java spring spring-security

谁能告诉我这是为什么

Details user=(Details) SecurityContextHolder.getContext().getAuthentication().getDetails();

有时返回Object,有时返回String

我测试了用户是否登录

System.out.println(SecurityContextHolder.getContext().getAuthentication().isAuthenticated());

它打印 true。

最佳答案

getDetails()中获得的对象实际上是关于所发生的身份验证的额外信息的地方,这就是为什么它是一个对象 可能包含任何东西。尽管像 Stephen C 这样的人可能会讨厌它,但我认为它很棒,因为它允许您存储有关用户如何登录以及通常登录的信息。例如我们用它来记录用户登录了哪些子域,这对于我们的应用程序来说是关键信息。

我认为,如果用户使用 Web 表单登录,getDetails() 通常会返回一个 WebAuthenticationDetails 对象。我不记得到底是什么导致它返回一个字符串,但我怀疑它是针对匿名用户的。

这可能听起来令人困惑,但在 Spring Security 的基本使用中没有必要查看 getDetails()getDetails() 不会告诉您任何有关谁登录或允许他们做什么的信息,因此您可以放心地忽略它 - 除非您的应用程序(如我的应用程序)需要知道如何以及登录。

关于java - Spring Security 中奇怪的对象类型更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813640/

相关文章:

java - Spring找不到用户创建的类

java - 如何减少在 Spring 中攻击内存中密码的表面积?

java - Jackson 内部使用 java 序列化还是完全独立?

javascript - Spring 表单标签复选框(表单 :checkbox) hidden field not sent to server?

java - MySQL - JAVA 存储过程有时会消失

java - Spring Boot gRPC : How to return error code when business error happens?

java - Spring 安全配置 Kotlin DSL

java - Spring Security accountNonExpired凭据NonExpired实现

Java 设计模式帮助

java - NativeLoader 尚未初始化。使用标准 native 库加载