0

我怎么知道什么getDetails()getPrincipal()回报SecurityContextHolder.getContext().getAuthentication()?类型是对象,我无法理解文档中写的内容。

4

2 回答 2

1

getDetails()返回一个 WebAuthenticationDetails 对象,该对象包含用户的 IP 地址和 SessionId(尽管我怀疑这可能取决于应用程序的类型;由于getPrincipal()类似地依赖,因此按道理getDetails()可能也会以类似的方式变化)。

getPrincipal()返回一个对象,该对象取决于您如何管理身份验证。例如,对于 LDAP 身份验证,该getPrincipal()方法返回一个 LdapUserDetailsImpl 对象。

如果您需要访问用户/主体信息,我会设置一个自定义 UserDetails 类,并从那里存储/检索所需的信息,但您可以轻松使用getPrincipal()并将getDetails()它们转换为合格的类,或者您扩展他们自然返回的课程(并根据您的喜好管理它们)。

这有点有趣,我觉得有必要指出,该getPrincipal()方法实际上并没有返回一个 Principal 对象(也不能将 LdapUserDetailsImpl 对象转换为一个 Principal 对象)。

于 2013-05-08T23:26:37.177 回答
0

这个怎么样?(假设getPrincipal()不返回null

String className = SecurityContextHolder.getContext().getAuthentication().getPrincipal().getClass().getName();

它应该返回带有包名的类名,即完全限定的类名。我认为该类型将是实现java.security.Principal. 因此,您可以执行以下操作:

Principal p = (Principal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
于 2013-05-08T22:11:43.770 回答