Я использую 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);
В миграция до c упоминается, что
Перенос экземпляров ресурса с инъекциями контекста поля в Dropwizard 2.0 включает нажатие поля в параметр в желаемой конечной точке
Но метод filter()
не получает контекст в качестве аргумента. Может кто-нибудь сообщить мне, каков рекомендуемый способ регистрации ContainerRequestFilter
, как указано выше в 2.x?