如何使用带有 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

如何通过数据库的LDAP和基于角色的授权实现Spring安全?

Spring 3,Spring Security,LDAP,如何向 LDAP 添加角色?