2016-10-27 7 views
1

Я пытаюсь добавить userId или имя пользователя в журнал запросов http, второе поле похоже на то, которое я хочу установить.Dropwizard [0.9.2] request добавить информацию об аутентификации

  • Удаленный адрес сервера
  • Дополнительно аутентификации информации
  • дата и время запроса
  • метод HTTP, URI и протокол для запроса
  • Отклик HTTP код состояния
  • Длина ответа
  • Заголовок заголовка HTTP (если установлен)
  • Пользователь HTTP агент (если он установлен)
  • Журнал латентность

чтения источник Jetty Jetty source, я нашел этот

getUserPrincipal().getName() 

Но я никогда не получить имя моего пользователя. Я что-то пропускаю, но не знаю, что.

Некоторые контекст, если он может помочь

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 показывают некоторые проблемы с протоколом HTTP-запроса в версиях 1.0.0 и 1.0.1. И 1.0.2 должен их разрешить. Проблемы: # 1737, # 1678 и # 1415. – zloster

+0

Я использую 0.9.2, я отредактировал свой вопрос –

+1

Я думаю, [вопрос # 898] (https://github.com/dropwizard/dropwizard/issues/898) - это то, что вам нужно проверить. Как упоминалось в комментариях, кажется, что для этого существует обходной путь путем ручного ввода объекта «UserAuthentication», который Jetty использует для ведения журналов. – 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)); 
}