有人可以告诉我为什么
Details user=(Details) SecurityContextHolder.getContext().getAuthentication().getDetails();
有时返回
Object
,有时返回String
?我已经测试了用户是否使用
System.out.println(SecurityContextHolder.getContext().getAuthentication().isAuthenticated());
它打印真实。
最佳答案
在getDetails()
中获得的对象实际上是获取有关已进行身份验证的其他信息的地方,这就是为什么它是一个可能包含几乎所有内容的Object
的原因。尽管像Stephen C这样的人可能会讨厌它,但我认为它很棒,因为它允许您存储有关用户登录方式以及通常登录者的信息。例如,我们使用它来记录用户登录的子域中的信息。 ,这是我们应用程序的关键信息。
我认为,如果用户使用Web表单登录,则getDetails()
通常将返回WebAuthenticationDetails
对象。我不记得是什么原因导致它返回字符串,但是我怀疑它是针对匿名用户的。
听起来可能有些混乱,但是没有必要在Spring Security的基本用法中查看getDetails()
。 getDetails()
不会告诉您有关谁登录或被允许执行的操作的任何信息,因此您可以放心地忽略它-除非您的应用程序(如我的应用程序)需要知道登录者的方式以及登录者。