2014-10-20 62 views
1

我正在使用Spring Security和Spring LDAP开发应用程序。 这是我的弹簧security.xml文件的一部分:Spring LDAP 3.1定制用户映射器

<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。 谢谢

回答

0

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

这意味着,用户登录后可以得到用户的细节,如所谓的任何后续方法:

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

或者,如果你喜欢,你可以将它转换为一个自定义类你已经创建只要当你实现UserDetails。

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

这有帮助吗?