Dropwizard [0.9.2]请求添加Auth信息

时间:2016-10-27 08:33:46

标签: logging jetty dropwizard

我正在尝试将userId或用户名添加到http请求日志中,第二个字段似乎是我想要设置的字段。

  • 远程服务器地址
  • 可选的身份验证信息
  • 申请日期和时间
  • 请求的HTTP方法,URI和协议
  • HTTP响应状态代码
  • 回复的长度
  • HTTP referer标头(如果已设置)
  • 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);
    }
}

进入我的资源

@POST
@Path("/test/")

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

如果我使用记录器记录name我没有问题,如何将它放入请求日志中?

1 个答案:

答案 0 :(得分: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));
}