2017-04-15 2 views
1

Ich habe versucht, Dropwizard-Authentifizierung in meinem Code, aber einige Probleme in POST-Aufruf zur Laufzeit, obwohl es funktioniert gut mit GET. das ist, wie ich dies in der GET-Aufruf bin mit:Dropwizard-Authentifizierung mit POST-Aufrufe fehlgeschlagen

@Override 
@GET 
@Path("/auth") 
public Response doAuth(@Auth User user) { 
    //do something 
} 

Und dann in Post Anruf, der nicht funktioniert:

@Override 
@POST 
@Path("/") 
public Response createLegalEntity(@Auth User user, LegalEntity createLegalEntity) { 
    // do something 
} 

Während des Laufens wird folgende Fehler werfen:

SEVERE: Missing dependency for method public javax.ws.rs.core.Response org.flipkart.api.LegalEntityResource.createLegalEntity(com.yammer.dropwizard.authenticator.User,org.flipkart.model.LegalEntity) at parameter at index 0 

Ich bin neu bei Dropwizard und nicht in der Lage, die Ursache des Problems herauszufinden.

UPDATE

Hier ist, wie ich meine LDAP-Authentifizierung configs registriert haben:

final LdapConfiguration ldapConfiguration = configuration.getLdapConfiguration(); 
    Authenticator<BasicCredentials, User> ldapAuthenticator = new CachingAuthenticator<>(
      environment.metrics(), 
      new ResourceAuthenticator(new LdapAuthenticator(ldapConfiguration)), 
      ldapConfiguration.getCachePolicy()); 

    environment.jersey().register(new AuthDynamicFeature(
      new BasicCredentialAuthFilter.Builder<User>() 
        .setAuthenticator(ldapAuthenticator) 
        .setRealm("LDAP") 
        .buildAuthFilter())); 

    environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class)); 

Antwort

1

Der wahrscheinlichste Grund ist, dass Sie nicht, dass Auth Funktion richtig konfiguriert haben. Die eine Sache, die die meisten Menschen vergessen, ist die AuthValueFactoryProvider.Binder. Eine Instanz dieser Klasse muss ebenfalls registriert werden. Dies würde definitiv den Fehler verursachen, den Sie sehen, wenn Sie nicht registriert sind. auch

// If you want to use @Auth to inject a custom Principal type into your resource 

environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class)); 

Von Basic Authentication docs

Siehe:

  • My comment für Dropwizard Problem in Bezug auf das gleiche Problem. Sie erhalten eine gute Erklärung für das, was das Problem verursacht.
+0

Nizza Erklärung, jetzt weiß ich, wie die Ressourcen initialisiert werden, aber das Problem ist, ich habe meinen Code bereits registriert AuthValueFactoryProvider.Binder in, dieses Problem weiterhin auftritt, überprüfen bitte mein Update auf die Frage – user2098324

+0

Ist das eine Laufzeit (auf Anfrage) Fehler oder Startfehler? Wenn ersteres, ich glaube, ich lag falsch in meiner Annahme. Wenn es sich um einen Startfehler handelt, handelt es sich um eine ModelValidationException. Es sieht jedoch so aus, als ob der Fehler auf Anfrage auftritt, da ein Objekt, das injiziert werden soll, nicht gefunden werden kann. Stellen Sie in diesem Fall sicher, dass Sie tatsächlich einen Benutzer vom Authentifikator zurückgeben. Das ist der einzige Gedanke, den ich mir vorstellen kann, dass dieser Fehler zur Laufzeit –

+0

ist es tatsächlich ein Startfehler, aber es gibt keine ModelValidationException in der StackTrace, überprüfen Sie bitte die Protokolle https://justpaste.it/15luy – user2098324

Verwandte Themen