Spring LDAP 3.1自定义用户映射器

时间:2014-10-20 19:45:26

标签: java spring spring-security spring-ldap

我正在使用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或AbstractContextMapper中扩展ContextMapper或扩展LdapUserDetailsMapper。

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

1 个答案:

答案 0 :(得分:0)

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

这意味着在用户登录后调用的任何后续方法都可以获得用户详细信息:

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

或者,如果您愿意,只要您实施UserDetails,就可以将其投射到您已创建的自定义类中。

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

这有帮助吗?