java - spring LDAP 3.1自定义用户映射器

  显示原文与译文双语对照的内容

我正在使用 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 。 谢谢

时间: 作者:

我不确定你到底在问什么。 我可以告诉你,一旦通过 LDAP Spring Security 进行身份验证,就会缓存用户细节,因这里不需要调用 LDAP 。

也就是说,在用户登录后调用的任何后续方法都可以获取这样的用户详细信息,如下所示:


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

或者如果你愿意,你可以将它转换为你已经创建的自定义类,只要你实现 UserDetails 。


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

这有帮助?

...