2016-08-09 184 views
0

Ich habe eine Anwendung, die einen LDAP-Server verwendet, um zu authentifizieren. Es funktioniert gut. Aber, es gibt ein Problem: In diesem LDAP-Server habe ich nicht die Benutzerrollen. Ich habe sie in einem anderen Server, in einer Datenbank meine Anwendung zugreifen. Und ich muss die Benutzerrollen von nun an der Anwendung hinzufügen.Holen Sie Benutzer und Rollen von verschiedenen Servern bei Spring Security

Ich würde gerne wissen, wie diese Rollen zu bekommen und sie an die AuthenticationManagerBuilder-Authentifizierung bei ConfigGlobal-Methode hinzufügen. Ist es möglich?

Einige Informationen:

Meine configureGlobal Methode ist:

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth.ldapAuthentication().userSearchFilter("uid={0}").contextSource().url(host); 
} 

Ich bin mit Hibernate 4.3.8 und Spring Security 4.1.1.

Die Tabelle mit den Rollen wurde wie folgt erstellt:

create table UserGroup (
    user varchar2(250), 
    role varchar2(250) 
); 

Und die Aufzeichnungen sind so etwas wie folgt aus:

[user1, role1]

[user1, role2]

[Benutzer1, Rolle3]

[Benutzer1, Rolle4]

[user2, role1]

[user2, role2]

Wie Sie sehen können, kann der gleiche Benutzer mehr als eine Rolle spielen. Dieselbe Rolle kann vielen Benutzern zugewiesen werden. Ich weiß, dass es Normalisierung braucht, aber ich denke, das ist zu diesem Zeitpunkt nicht wichtig.

Antwort

0

Was ich in der Vergangenheit getan haben, ist eine UserDetailsService implementieren, die den Benutzernamen und Rollen aus der Datenbank der Anwendung auffüllt & AbstractUserDetailsAuthenticationProvider, die eine LDAP-Bindung Prüfung innerhalb additionalAuthenticationChecks tut.

Funktioniert wie ein Charme. Die enthält ein Flag, das mir sagt, wo der Benutzer zu validieren ist und innerhalb der additionalAuthenticationChecks haben wir den Benutzer gegen eine von mehreren Validierungsquellen validiert, wie die lokale Datenbank oder verschiedene mandantenfähige LDAP-Server.

+0

Haben Sie einen Code zum Anzeigen? – Paulo