Dropwizard [0.9.2] 请求添加 Auth 信息
Dropwizard [0.9.2] request add Auth information
我正在尝试将 userId 或用户名添加到 http 请求日志中,第二个字段似乎是我要设置的字段。
- 远程服务器地址
- 可选认证信息
- 请求日期和时间
- 请求的 HTTP 方法、URI 和协议
- HTTP 响应状态代码
- 响应的长度
- HTTP referer header(如果设置)
- 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());
[...]
}
如果我用 logger 记录 name
,我可以毫无问题地获取它,如何将它放入请求日志中?
根据 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));
}
我正在尝试将 userId 或用户名添加到 http 请求日志中,第二个字段似乎是我要设置的字段。
- 远程服务器地址
- 可选认证信息
- 请求日期和时间
- 请求的 HTTP 方法、URI 和协议
- HTTP 响应状态代码
- 响应的长度
- HTTP referer header(如果设置)
- 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());
[...]
}
如果我用 logger 记录 name
,我可以毫无问题地获取它,如何将它放入请求日志中?
根据 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));
}