在 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
。
我有一个 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
。