在 Jersey Request Filter 中区分多个请求

Distinguish multiple requests in Jersey Request Filter

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

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

Does each request make a different instance of the logging filter class ?

没有。因此,尝试存储成员状态不是一种选择。您应该做的是使用 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