2016-10-27 70 views
1

我試圖將userId或用戶名添加到http請求日誌中,第二個字段似乎是我想要設置的字段。Dropwizard [0.9.2]請求添加身份驗證信息

  • 遠程服務器地址
  • 可選認證信息
  • 請求的日期和時間
  • 的HTTP方法,URI,和協議的請求
  • 的HTTP響應狀態代碼
  • 響應的長度
  • HTTP referer頭(如果設置)
  • 的HTTP用戶代理(如果已設置)
  • 日誌延遲

閱讀碼頭源Jetty source,我發現這個

getUserPrincipal().getName() 

但我從來沒有讓我的用戶的名稱。我thnik我失去了一些東西,但不知道是什麼。

有些情況下,如果它可以幫助

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

進入我的ressource

@POST 
@Path("/test/") 

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

如果我登錄的name與記錄我明白了,沒有問題,如何把它變成了請求日誌?

+0

哪個Dropwizard的版本您使用的?最近的發行說明在這裏http://www.dropwizard.io/1.0.2/docs/about/release-notes.html顯示了1.0.0和1.0.1版本中的HTTP請求記錄的一些問題。而1.0.2應該解決它們。問題是#1737,#1678和#1415。 – zloster

+0

我正在使用0.9.2,我編輯了我的問題 –

+1

我認爲[問題#898](https://github.com/dropwizard/dropwizard/issues/898)是你需要檢查的。正如在評論中提到的那樣,通過手動注入Jetty用於記錄請求的'UserAuthentication'對象似乎有一個解決方法。 – zloster

回答

0

誠如通過zloster我注入UserAuthentication到我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)); 
}