我怎么知道什么getDetails()
等getPrincipal()
回报SecurityContextHolder.getContext().getAuthentication()
?类型是对象,我无法理解文档中写的内容。
2 回答
getDetails()
返回一个 WebAuthenticationDetails 对象,该对象包含用户的 IP 地址和 SessionId(尽管我怀疑这可能取决于应用程序的类型;由于getPrincipal()
类似地依赖,因此按道理getDetails()
可能也会以类似的方式变化)。
getPrincipal()
返回一个对象,该对象取决于您如何管理身份验证。例如,对于 LDAP 身份验证,该getPrincipal()
方法返回一个 LdapUserDetailsImpl 对象。
如果您需要访问用户/主体信息,我会设置一个自定义 UserDetails 类,并从那里存储/检索所需的信息,但您可以轻松使用getPrincipal()
并将getDetails()
它们转换为合格的类,或者您扩展他们自然返回的课程(并根据您的喜好管理它们)。
这有点有趣,我觉得有必要指出,该getPrincipal()
方法实际上并没有返回一个 Principal 对象(也不能将 LdapUserDetailsImpl 对象转换为一个 Principal 对象)。
这个怎么样?(假设getPrincipal()
不返回null
)
String className = SecurityContextHolder.getContext().getAuthentication().getPrincipal().getClass().getName();
它应该返回带有包名的类名,即完全限定的类名。我认为该类型将是实现java.security.Principal
. 因此,您可以执行以下操作:
Principal p = (Principal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();