我正在使用dropwizard 1.3.9,并正在努力迁移到最新的dropwizard 2.x。
现在我有一个像下面的ContainerRequestFilter
@Authenticate
public class BasicAuthenticator implements ContainerRequestFilter {
@Context
private HttpServletRequest servletRequest;
private final CollectorChannel collectorChannel ;
private final ConfigStore configStore;
public BasicAuthenticator(final CollectorChannel collectorChannel, final ConfigStore configStore)
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
String requestIpAddress = servletRequest.getRemoteAddr();
String requestHost = servletRequest.getRemoteHost();
logger.info("Request originates from IP {} Host {}", requestIpAddress, requestHost);
String authHeader = requestContext.getHeaderString("Authorization");
Optional<User> user = AuthUtils.getUserBasicAuth(authHeader);
if (!user.isPresent()) {
requestContext.abortWith(responseUnAuthenticated());
return;
}
if (!isAuthentic(user.get())) {
requestContext.abortWith(responseUnAuthenticated());
}
if (!isValidLiSource(requestIpAddress) && !isValidLiSource(requestHost)) {
requestContext.abortWith(responseUnauthorized());
return;
}
}
}
我如下注册
final BasicAuthenticator basicAuthenticator = new BasicAuthenticator(collectorChannel, configStore);
environment.jersey().register(basicAuthenticator);
在migration doc中提到
使用字段上下文注入将资源实例迁移到Dropwizard 2.0涉及将字段推入所需端点
但是filter()
方法不会将上下文作为参数。有人可以让我知道在2.x上面注册ContainerRequestFilter
的推荐方法是什么吗?
如上文@Paul Samostha所指出,并在forum中也回答如下)>
嗯,迁移指南仅讨论资源实例,ContainerRequestFilters。为了什么值得我在2.0.8中尝试过具有现场注入的上下文和实例注册上面写的,它似乎对我有用。 HttpServletRequest是在执行过滤器时注入并可用。