如何使用带有 LDAP 的 Spring Security 获取用户信息
Posted
技术标签:
【中文标题】如何使用带有 LDAP 的 Spring Security 获取用户信息【英文标题】:How can I get the user information using Spring Security with LDAP 【发布时间】:2013-04-17 12:50:58 【问题描述】:我使用 Spring 3.1.1 和 Spring Security 3.2.0 以及 LDAP 身份验证。 我已经达到了可以正常工作的程度,我可以使用我的 LDAP 用户名和密码登录,我什至可以用这个显示用户名
<security:authentication property="principal.username" />, is currently logged in.
如果可能的话,我想知道如何获取我的 LDAP 凭据中存储的名字、姓氏、电子邮件地址或其他类似信息。
我试过 property="credentials"
但这返回 null...
请帮忙!!
【问题讨论】:
【参考方案1】:实现您自己的 UserDetailsContextMapper 并将 LDAP 用户属性加载到 UserDetails 对象中
http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#ldap-custom-user-details
【讨论】:
这个链接给了我一个 404 :( 在某处有更新的副本吗? 试试这个链接docs.spring.io/spring-security/site/docs/current/reference/html/…【参考方案2】:这与我几天前的问题非常相似:
How do I use a custom authorities populator with Spring Security and the ActiveDirectoryLdapAuthenticationProvider?
如果您不使用 Active Directory,您可以简单地扩展 LdapAuthenticationProvider
类并覆盖 loadUserAuthorities
方法,在该方法中您可以根据用户的 LDAP 属性捕获相关的用户信息:
String firstName = userData.getStringAttribute("givenName");
String lastName = userData.getStringAttribute("sn");
//etc.
您可以将这些存储在任何您喜欢的位置,并且您仅限于通过 LDAP 提供的属性。然后,您必须在适当的 bean 中指定您的 LdapAuthoritiesProvider(ldapAuthoritiesPopulator,如果没有记错的话)。
我相信以上内容适用于非 AD LDAP,但您显然需要对其进行测试才能确定。如果您还没有使用它,我推荐LDAP browser for Eclipse provided by Apache Studios。
【讨论】:
以上是关于如何使用带有 LDAP 的 Spring Security 获取用户信息的主要内容,如果未能解决你的问题,请参考以下文章
在带有 CAS 和 LDAP 的 Grails 中使用 Spring Security
带有 LDAP 注销的 Spring Security 无法删除会话
带有 LDAP 和自定义 UserDetailsContextMapper 的 Spring Security
带有spring boot LDAP身份验证的Angular2