有人可以告诉我为什么

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()不会告诉您有关谁登录或被允许执行的操作的任何信息,因此您可以放心地忽略它-除非您的应用程序(如我的应用程序)需要知道登录者的方式以及登录者。

08-27 15:24