【问题标题】:Spring LDAP 3.1 Custom User MapperSpring LDAP 3.1 自定义用户映射器
【发布时间】:2015-01-28 20:24:52
【问题描述】:

我正在使用 Spring Security 和 Spring LDAP 开发一个应用程序。 这是我的 spring-security.xml 的一部分:

<authentication-manager alias="authenticationManager">
    <ldap-authentication-provider
            user-search-filter="sAMAccountName={0}"
            user-search-base="OU=UK,OU=Domain Objects,dc=test,dc=test1"
            group-search-filter="member={0}"
            group-search-base="OU=_Groups,OU=UK,OU=Domain Objects,dc=test,dc=test1"
            group-role-attribute="cn"
            role-prefix="ROLE_">
    </ldap-authentication-provider>
</authentication-manager>

<ldap-server url="ldap://host:389/"
                      manager-dn="managerUser"
                      manager-password="ManagerPassword" />

现在我需要对用户属性做一些逻辑。我想知道是否有办法在登录阶段获取该属性,或者每次需要该属性时都需要在 LDAP 上进行搜索。

现在上网看有点迷茫,因为我在网上找到了很多获取自定义属性的方法:扩展DAO中的ContextMapper或者AbstractContextMapper或者扩展LdapUserDetailsMapper。

您能帮我找到正确的解决方案吗?我认为最好的方法是有一个对象,我可以在登录阶段放置我需要的属性,而不是每次需要该属性时都查询 LDAP。 谢谢

【问题讨论】:

    标签: java spring spring-security spring-ldap


    【解决方案1】:

    我不确定你到底在问什么。我可以告诉您的是,一旦您通过 LDAP 进行身份验证,spring security 就会缓存用户详细信息,因此您无需在每次后续请求时都调用 LDAP。

    这意味着用户登录后调用的任何后续方法都可以获取用户详细信息,如下所示:

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    UserDetails ldapUser = (UserDetails) authentication.getPrincipal();
    

    或者,如果您愿意,只要您实现 UserDetails,就可以将其转换为您创建的自定义类。

    public class MyUser implements UserDetails {
    .....
    }
    

    这有帮助吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多