Каков рекомендуемый способ регистрации ContainerRequestFilter в Dropwizard 2.x? - PullRequest
0 голосов
/ 09 апреля 2020

Я использую 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?

1 Ответ

0 голосов
/ 19 апреля 2020

Как указал @Paul Samostha выше и также ответил на форуме , как показано ниже

Hm, руководство по миграции рассказывает об экземплярах ресурсов, но не ContainerRequestFilters. Для чего это стоило, я попробовал это в 2.0.8 с введенным полем контекстом и регистрацией экземпляра, как вы написали выше, и, похоже, это работает для меня. HttpServletRequest внедряется и становится доступным при выполнении фильтра.

...