【问题标题】:Distinguish multiple requests in Jersey Request Filter在 Jersey 请求过滤器中区分多个请求
【发布时间】:2017-05-23 08:28:13
【问题描述】:

我有一个实现 ContainerRequestFilter 和 ContainerResponseFilter 的类。我正在使用这个类来记录请求和对它的相应响应。我注意到请求过滤器中的 start_time 并使用 MDC.put("start-time",start_time) 将其传播到响应过滤器。 我可以看到,由于响应过滤器将 ContainerRequestContext 作为参数,它能够将响应映射到正确的请求。

但我无法看到日志过滤器类如何区分同时出现的多个请求调用。每个请求是否生成不同的日志过滤器类实例?

【问题讨论】:

  • 您可以粘贴示例代码以更好地理解问题吗?您是否有自定义日志过滤器来执行此操作?
  • 是的,我编写了一个自定义日志过滤器。我用下面的教程写了一个[链接]makeinjava.com/…

标签: java jersey-2.0 requestfiltering


【解决方案1】:

每个请求是否会创建不同的日志过滤器类实例?

没有。因此,尝试存储会员状态不是一种选择。你应该做的是使用ContainerRequestContext 在请求端设置一个属性。在响应端,只需从相同的上下文中获取属性。

// request filter
filter(ContainerRequestContext request) {
  request.setProperty("key", value);
}

// response filter
filter(ContainerRequestContext request, ContainerResponseContext response) {
    Object value = request.getProperty("key");
}

每个请求都会有自己的Container(Request|Response)Context

【讨论】:

  • 我在问 RequestFilter 如何区分同时到来的多个请求。请求过滤器是如何实现的?过滤器如何处理多个请求,以便不会混合两个请求上下文。我可以使用 MDC 设置开始时间,它工作正常。我也知道我们可以设置请求属性来保存状态。
  • Jersey 为每个请求创建一个新的上下文并将上下文传递给过滤器。还有什么要知道的?
猜你喜欢
  • 2014-09-19
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 2012-04-14
相关资源
最近更新 更多