2016-10-27 3 views
1

Ich versuche, die Benutzer-ID oder den Benutzernamen in das HTTP-Anfrage-Log hinzuzufügen, das zweite Feld scheint das zu sein, das ich einstellen möchte.Dropwizard [0.9.2] Anfrage hinzufügen Auth Informationen

  • Die Remote-Server-Adresse
  • Optionale Informationen Authentifizierung
  • anfordern Datum und Uhrzeit
  • Die HTTP-Methode, URI, und Protokoll für die Anforderung
  • Der HTTP-Antwortstatuscode
  • Die Länge der Antwort
  • Die HTTP-Referer-Header (wenn festgelegt)
  • Der HTTP-User-Agent (falls gesetzt) ​​
  • Die Log-Latenz

lesen Jetty Quelle Jetty source, fand ich diese

getUserPrincipal().getName() 

Aber ich den Namen meines Benutzer nie bekommen. Ich thnik Ich vermisse etwas, weiß aber nicht was.

Einiger Kontext, wenn es

public class MyUser implements Principal { 
    private Long id; 
    private String name; 


    public String getName() { 
     if (name == null || name.isEmpty()) 
      return getIdAsString(); 
     return name; 
    }  
    public String getIdAsString() { 
     return Long.toString(id, 16); 
    } 
} 

In meiner ressource

@POST 
@Path("/test/") 

public int test(
     @Auth @ApiParam(hidden = true) Principal user, ...) 
{ 
    logger.error(user.getName()); 
    [...] 
} 

helfen kann, wenn ich die name mit Logger lüge ich es ohne Probleme zu bekommen, wie es in das Anforderungsprotokoll haben?

+0

Welche Version von Dropwizard verwenden Sie? Die letzten Release Notes hier http://www.dropwizard.io/1.0.2/docs/about/release-notes.html zeigen einige Probleme mit der HTTP-Request-Protokollierung in den Versionen 1.0.0 und 1.0.1. Und 1.0.2 sollte sie lösen. Probleme sind # 1737, # 1678 und # 1415. – zloster

+0

Ich benutze 0.9.2, ich habe meine Frage bearbeitet –

+1

Ich denke, [Ausgabe # 898] (https://github.com/dropwizard/dropwizard/issues/898) ist, was Sie überprüfen müssen. Wie in den Kommentaren erwähnt, scheint es eine Umgehung dafür zu geben, indem das 'UserAuthentication'-Objekt, das Jetty für die Protokollierung von Anforderungen verwendet, manuell injiziert wird. – zloster

Antwort

0

Wie zloster riet ich injizieren UserAuthentication in mein AuthFilter

Request request = HttpChannel.getCurrentHttpChannel().getRequest(); 
if (request != null) { 
     Principal user = new Principal() { 
      @Override 
      public String getName() { 
       MyUser user = (MyUser) principal.get(); 
       return user.getIdAsString(); 
      } 
     }; 
     UserIdentity userId = new DefaultUserIdentity(null, user, null); 
     request.setAuthentication(new UserAuthentication(null, userId)); 
} 
Verwandte Themen