在Dropwizard 2.x中注册ContainerRequestFilter的推荐方法是什么?

问题描述 投票:0回答:1

我正在使用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的推荐方法是什么吗?

dropwizard
1个回答
0
投票

如上文@Paul Samostha所指出,并在forum中也回答如下)>

嗯,迁移指南仅讨论资源实例,ContainerRequestFilters。为了什么值得我在2.0.8中尝试过具有现场注入的上下文和实例注册上面写的,它似乎对我有用。 HttpServletRequest是在执行过滤器时注入并可用。

© www.soinside.com 2019 - 2024. All rights reserved.