0

Ich habe Active Directory-Authentifizierung mit Spring Security implementiert und es funktioniert einwandfrei. Jetzt möchte ich Details von anderen Benutzern mit ihrer sAMAccountName bekommen. Diese Funktionalität benötige ich für Admin, um Benutzer in unserer Anwendung zu genehmigen oder abzulehnen. Unter Verwendung von Code kann ich eingeloggte Benutzerdetails abrufen.Active Directory-Benutzersuche im Frühjahr

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

Wie dieses Authentication Objekt verwenden, um andere Benutzerdaten zu holen. Ich benutze spring-security-ldap-4.0.1spring-security-core-4.0.1

Antwort

0

Sie sollten sich die UserDetailsContextMapper ansehen. Es gibt bereits implementierende Klassen, die automatisch einige Attribute eines LDAP-Objekts wie InetOrgPersonContextMapper oder PersonContextMapper zuordnen. Wenn es ein spezielles Attribut gibt, müssen Sie Ihre eigenen registrieren, z. Wir haben Berichtszeilen in AD mit den Attributen manager und directReports gespeichert, die ich manuell zuordnen musste.

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); 
    } 

} 

Und natürlich werden Sie auch Ihre UserDetails auch zwicken müssen:

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; 
    } 
} 

Hoffnung, das hilft.