当前位置: 首页 > 知识库问答 >
问题:

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

仉伟兆
2023-03-14

在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());

谢谢

共有1个答案

丌官霖
2023-03-14

如果不调用endpoint,就无法过滤任何内容,因为这是请求到达服务的方式。如果你指的是不打控制器,那就另当别论了。但即使那样,您也想要预匹配响应过滤器之类的东西,而这种东西自然是不存在的。它违背了你服务的目的。为什么不在控制器和处理链中的任何其他部分完成它们的工作后,在所有响应上添加您想要的任何标题呢?!您可以访问响应过滤器中的请求上下文和响应上下文,因此正如Paul在注释中提到的那样,您可以在requestContext中存储一些需要的信息,而在ContainerRequestFilter中存储这些信息。JAX-RS规范有一些过滤器和拦截器的好例子。

 类似资料:
  • 我想通过REST API(最好使用Python或Java)发出请求。然而,我想过滤掉结果,因为我不想从响应中得到所有信息。例如,我只需要文本。作为初学者,我很难取得成功。到目前为止,我只在Python上用库“requests”完成了一个请求。有人能帮我吗?

  • 我正在使用Servlet过滤器来实施访问控制。扩展it以测试用户角色的最佳方式是什么?我能想出几种解决方案,但没有一种是优雅的。 编写角色测试并不难。但是如何将角色传递给给定url的过滤器? e、 在网络上。xml 谢谢

  • 如果有人能抛出关于如何修改以下播放框架日志过滤器(ref.play filters)以实现以下目标的指针,我将不胜感激: null

  • 我试图记录应用程序中的每个传入请求和传出响应。我正在使用jee 6,所以我没有ContainerRequestFilter和ContainerResponseFilter类。所以我决定用滤镜。 我用@WebFilter(“/*”)注释了一个类,并实现了Filter接口。我成功地读取了请求头和请求正文。我也很难阅读响应标题和响应正文。下面是代码片段 MyHttpServletResponse seW

  • 在Jersey 1.x中,我们从一个(Jersey)会话属性访问Wicket会话,如这里https://stackoverflow.com/a/15767824/1399659.所述 在迁移到Jersey 2.x时,使用ContainerRequestFilter似乎是合适的模式,它还允许Springbean注入。我们通过包括 作为 Servlet 容器的初始化参数,并在容器请求筛选实现上使用@P

  • 在内部,如果出现任何异常,将被重定向&这不需要通过,可以跳过此请求。 我已经实现了OncePerRequestFilter&任何请求都不会调用它。这必须在OAuth过滤器之前调用。 让我知道这个安全配置出了什么问题。