2013-05-08 87 views
0

我该怎么知道getDetails()getPrincipal()等回报SecurityContextHolder.getContext().getAuthentication()?该类型是对象,我无法理解文档中写的是什么。春季安全验证对象的方法

回答

0

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

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

它应该返回附有包名的类名,即完全合格的类名。我认为这个类型会实现java.security.Principal(某些弹簧专用的类)。所以,你可以做到以下几点:

Principal p = (Principal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
0

getDetails()返回一个包含用户的IP地址和会话ID(虽然我怀疑这可能取决于应用程序的类型WebAuthenticationDetails对象;因为getPrincipal()同样是相关的,它突出原因getDetails()也可能以类似的方式变化)。

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

如果您需要访问的用户/主体信息,我会建立一个自定义的UserDetails类,并存储/检索有所需的信息,但你可以很容易地使用getPrincipal()getDetails()提供你施放它们作为符合条件的课程,或者扩展他们自然返回的课程(并按照您的喜好管理它们)。

我觉得有些有趣的是,getPrincipal()方法实际上并不返回一个Principal对象(也不能将LdapUserDetailsImpl对象转换为Principal对象)。