首页 文章

在Jersey过滤器中访问请求和响应

提问于
浏览
0

在 Jersey ,可以添加 ContainerRequestFilterContainerResponseFilter

public class RequestFilter implements ContainerRequestFilter {
    @Override
    public ContainerRequest filter(ContainerRequest containerRequest) {
       // logic
   }
}

public class ResponseFilter implements ContainerResponseFilter {
    @Override
    public ContainerResponse filter(ContainerRequest request,
                                    ContainerResponse response) {
       // logic
    }
}

两者都使用PackagesResourceConfig添加:

PackagesResourceConfig prc = new PackagesResourceConfig("com.company.xxx");

prc.getContainerRequestFilters().add(new RequestFilter());
prc.getContainerResponseFilters().add(new ResponseFilter());

尽管响应过滤器也可以访问请求,但在调用 endpoints 之后调用它 . 我们需要的是能够在调用 endpoints 之前访问同一过滤器中的请求和响应 . 请求筛选器在 endpoints 之前调用,但无权访问响应 .

似乎无法添加可以访问 HttpServletRequestHttpServletResponse 的标准 javax.servlet.Filter ,并且在调用 endpoints 之前调用它 .

谢谢

1 回答

  • 0

    如果不调用 endpoints ,就无法过滤任何内容,因为_3025988是一个不同的故事 . 但即使这样,你也想要一些预先匹配的响应过滤器,它自然不存在 . 它违背了您服务的目的 . 为什么不在控制器和处理链中的任何其他部分完成工作后,在所有响应中添加所需的 Headers ?!您可以在响应过滤器中访问请求上下文和响应上下文,因此保罗在评论中提到您可以在 ContainerRequestFilter 中存储requestContext中需要的一些信息 . JAX-RS规范有一些过滤器和拦截器的好例子 .

相关问题