谁能告诉我这是为什么
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/