java - 如何从我的 Dropwizard 资源中访问已包装在自定义类中的请求?

标签 java jersey dropwizard

我正在使用 Dropwizard,我想从过滤器中包装一个请求对象,并从我的资源类中获取对该实例的访问权限

例如执行以下操作

过滤器.java

public class ServiceRequestExtractionFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
            HttpServletRequest httpRequest   = (HttpServletRequest) request;

            ProxyResourceRequest requestWrapper = new RequestWrapper(httpRequest, svcRequestData);

            chain.doFilter(requestWrapper, response);
        }
    }
...

资源.java

@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public class DemoResource {

    @GET
    @Timed
    public Response get(@Context UriInfo uriInfo, @Context RequestWrapper request) {

...

这不起作用,我也没有任何理由期望它起作用,但这似乎是解释我正在尝试做的事情的好方法。

最佳答案

试试这里记录的这个 ContainerFilter:http://dropwizard.io/manual/core.html#jersey-filters

public class DateNotSpecifiedFilter implements ContainerRequestFilter {

    @Context ExtendedUriInfo extendedUriInfo;

    @Override
    public ContainerRequest filter(ContainerRequest request) {
        boolean methodNeedsDateHeader = extendedUriInfo.getMatchedMethod().isAnnotationPresent(DateRequired.class);
        String dateHeader = request.getHeaderValue(HttpHeaders.DATE);

        if (methodNeedsDateHeader && dateHeader == null) {
            Exception cause = new IllegalArgumentException("Date Header was not specified");
            throw new WebApplicationException(cause, Response.Status.BAD_REQUEST);
        } else {
            return request;
        }
    }
}

只需在您的应用程序 run() 中添加:

environment.jersey().getResourceConfig().getContainerRequestFilters().add(new DateNotSpecifiedFilter());

关于java - 如何从我的 Dropwizard 资源中访问已包装在自定义类中的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19382343/

相关文章:

java - 用Java/jersey/grizzly编写的微服务的线程配置

java - 如何在使用 Netty 运行的 Jersey 中获取 SSL 信息(对等证书)?

rest - 带有 Struts2 的 Jersey

mysql - 在编写代码时不知道哪些列的情况下更新 MYSQL 数据库中的行?

java - Eclipse DDMS 中的线程状态为 “monitor”

java - 继承Java中的静态方法?

Java 客户端/服务器应用程序 - 如何从服务器端获取输入类型?

java - Maven Dropwizard 中的 Hibernate 数据库连接错误

java - 从 Junit 中的 Jax-Rs Response 类获取 header 值、状态代码等

java - 必须输入两次才能扫描仪读取