0

私はSpring Securityを使用してActive Directory認証を実装していますが、正常に動作しています。今私は彼らのsAMAccountNameを使って他のユーザーの詳細を知りたいです。管理者がこのアプリケーションでユーザーを承認または拒否するために必要なこの機能。以下のコードを使用して、ログインしたユーザーの詳細を取得できます。春のActive Directoryユーザー検索

Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
String currentPrincipalName = authentication.getName(); 

このAuthenticationオブジェクトを使用して他のユーザーの詳細を取得する方法 私は使用していますspring-security-ldap-4.0.1spring-security-core-4.0.1

答えて

0

あなたはUserDetailsContextMapperを見てください。 InetOrgPersonContextMapperまたはPersonContextMapperのようなLDAPオブジェクトのいくつかの属性を自動的にマッピングするクラスを実装しています。特別な属性がある場合は、独自の属性を登録する必要があります。私たちは手作業でマップしなければならなかったmanagerdirectReportsの属性を使ってADに格納された行を報告しています。

public class CustomUserDetailsContextMapper extends LdapUserDetailsMapper implements UserDetailsContextMapper { 

    @Autowired 
    private LdapUserService ldapUserService; 

    @Override 
    public UserDetails mapUserFromContext(DirContextOperations ops, String username, 
      Collection<? extends GrantedAuthority> authorities) { 

     UserDetails details = super.mapUserFromContext(ops, username, authorities); 

     String manager = ops.getStringAttribute("manager"); 
     String[] directReports = ops.getStringAttributes("directReports"); 

     User user = new User(
       username, 
       "", 
       details.isEnabled(), 
       details.isAccountNonExpired(), 
       details.isCredentialsNonExpired(), 
       details.isAccountNonLocked(), 
       details.getAuthorities(), 
       manager, 
       directReports); 

     return user; 
    } 

    @Override 
    public void mapUserToContext(UserDetails user, DirContextAdapter dir) { 
     super.mapUserToContext(user, dir); 
    } 

} 

そして、明らかにあなたはまた、同様にあなたのUserDetailsを微調整する必要があります。このことができます

public class User extends org.springframework.security.core.userdetails.User { 

    private String manager; 
    private String[] directReports; 

    public User(String username, String password, boolean enabled, boolean accountNonExpired, 
      boolean credentialsNonExpired, boolean accountNonLocked, 
      Collection<? extends GrantedAuthority> authorities) { 
     super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); 
    } 

    public User(String username, String password, boolean enabled, boolean accountNonExpired, 
      boolean credentialsNonExpired, boolean accountNonLocked, 
      Collection<? extends GrantedAuthority> authorities, String manager, String[] directReports) { 
     this(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); 
     this.manager = manager; 
     this.directReports = directReports; 
    } 

    public String getManager() { 
     return manager; 
    } 

    public String[] getDirectReports() { 
     return directReports; 
    } 
} 

希望。

関連する問題