2016-11-01 6 views
1

Ich habe einige Forschung über Drop-Wizard Sicherheit und Authentifizierung. Hier ist der Link, den ich http://howtodoinjava.com/dropwizard/dropwizard-basic-auth-security-example/ verwendet habe.Dropwizard auth Benutzer

Meine Frage ist, wie Sie wirklich neue Benutzer erstellen, da VALID_USERS ein statisches Finale ist und nicht geändert werden kann. Ich dachte darüber nach, eine Datenbank zu erstellen, und das würde aus einem Benutzerobjekt bestehen, das den Benutzernamen und die Rolle ex enthält. Administrator. (Ich brauche kein Passwort) Aber ich bin verwirrt, was ich zurückgeben würde. In ihrem Beispiel gaben sie Optional.of zurück (neuer Benutzer (credentials.getUsername(), VALID_USERS.get (credentials.getUsername()))); Würde ich ein Benutzerobjekt zurückgeben?

Im Wesentlichen möchte ich einen Benutzer mit dem Benutzernamen authentifizieren und ihnen eine Rolle der Berechtigung ex geben. Admin, grundlegend. Aber ich glaube, ich bin verwirrt, wie man eine Liste von Benutzern und ihren Rollen erzeugt. Ich dachte daran, eine Datenbank zu erstellen, aber ich bin mir nicht sicher, wie genau ich das umsetzen würde.

public class AppBasicAuthenticator implements Authenticator<BasicCredentials, User> 
{ 
    private static final Map<String, Set<String>> VALID_USERS = ImmutableMap.of(
     "guest", ImmutableSet.of(), 
     "user", ImmutableSet.of("USER"), 
     "admin", ImmutableSet.of("ADMIN", "USER") 
    ); 

    @Override 
    public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException 
    { 
     if (VALID_USERS.containsKey(credentials.getUsername()) && "password".equals(credentials.getPassword())) 
     { 
      return Optional.of(new User(credentials.getUsername(), VALID_USERS.get(credentials.getUsername()))); 
     } 
     return Optional.empty(); 
    } 
} 

Antwort

0

In der neuesten Version von DropWizard können Sie sowohl Authentifizierung und Autorisierung finden. Die erstgenannte Anweisung weist DropWizard an, einen Benutzer nach Anmeldeinformationen zu fragen, wenn Sie beim Versuch, auf eine Ressource zuzugreifen oder eine andere Identitätsprüfung durchzuführen, die Standardauthentifizierung verwenden. Letzteres ermöglicht es einem Benutzer, basierend auf den Rollen des Benutzers, Zugriff auf verschiedene Ressourcen zu gewähren.

Es gibt verschiedene Möglichkeiten, wie Sie Benutzerdaten und Rollen speichern können. Beispiele sind eine von Ihnen erwähnte Datenbank, ein LDAP-Server und ein Identitätsmanagementsystem eines Drittanbieters. Wenn Sie sich für die Standardauthentifizierung interessieren, können Sie sich mein Beispiel here ansehen. Eine Datenbank wird zum Speichern der Anmeldeinformationen des Benutzers verwendet. Auch, hier ist mein kleines veraltetes Tutorial auf DropWizard authentication. Der Code für die neueste Version befindet sich in der oben genannten Beispielanwendung.

Um nur die Authentifizierung zu implementieren, können Sie das Hinzufügen von Rollen und das Registrieren eines Authorizer überspringen. Um eine Autorisierung hinzuzufügen, können Sie Ihrer Benutzer-Entität eine Rollensammlung hinzufügen und Annotationen wie @RolesAllowed und @PermitAll zusammen mit der Autorizer-Implementierung verwenden, um den Zugriff auf Ihre Ressourcen zu gewähren/zu verweigern.

Ein Link zu den DropWizard-Authentifizierungsdokumenten lautet here.

Bitte zögern Sie nicht, weitere Fragen in Kommentaren und viel Glück zu stellen.

+0

Hey Vielen Dank! Ich fand Ihr Beispiel sehr nützlich. Eine Frage, die ich hatte, war, zwei Ebenen von Benutzern, Admin und Gast, zu erstellen, die unterschiedliche Berechtigungen hätten. Kannst du mir ein paar Tipps geben, wie das geht? – Bob

+0

Die Idee ist, dass Sie eine Sammlung von Strings in Ihren Benutzerobjekten verwenden können; Strings sind eigentlich Rollen. JPA/Hibernate ermöglicht dies (http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#collections-value). Danach sollten Sie einen Authorizer implementieren, ein Beispiel aus dem Dropwizard-Projekt ist unten und registrieren Sie sich in der run() -Methode der Anwendungsklasse. Danach können Sie Ihre Methoden mit @RolesAllowed-Annotation sichern, wobei Sie eine durch Kommas getrennte Liste von Rollen wie @RolesAllowed ("ADMIN") bereitstellen. – javaeeeee

+0

public class ExampleAuthorizer implementiert Authorizer { @Override public boolean autorisieren (Benutzer Benutzer, String Rolle) { return user.getRoles() = null && user.getRoles() enthält (Rolle)!. } } Dies ist ein Autorizer von DropWizard Beispielanwendung. – javaeeeee

Verwandte Themen