Java Jersey 2-基于请求头的注册响应筛选器
对于请求方法,我有两个Java Jersey 2-基于请求头的注册响应筛选器,java,jersey,jax-rs,jersey-2.0,Java,Jersey,Jax Rs,Jersey 2.0,对于请求方法,我有两个ContainerResponseFilter,其中只有一个应该运行。这取决于特定的请求头 我创建了一个DynamicFeature,用于检查此标题并相应地注册过滤器 public class CustomFeature implements DynamicFeature { @Context HttpHeaders httpHeaders; @Override public void configure(ResourceInfo reso
ContainerResponseFilter
,其中只有一个应该运行。这取决于特定的请求头
我创建了一个DynamicFeature
,用于检查此标题并相应地注册过滤器
public class CustomFeature implements DynamicFeature {
@Context
HttpHeaders httpHeaders;
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
String value = httpHeaders.getHeaderString("x-something");
if (value != null && !value.isEmpty()) {
context.register(SomeFilter.class);
} else {
context.register(OtherFilter.class);
}
}
}
这将引发以下异常:
"java.lang.IllegalStateException: Not inside a request scope.
at org.glassfish.jersey.internal.guava.Preconditions.checkState(Preconditions.java:169)
at org.glassfish.jersey.process.internal.RequestScope.current(RequestScope.java:153)
at org.glassfish.jersey.inject.hk2.RequestContext.findOrCreate(RequestContext.java:55)
at org.jvnet.hk2.internal.MethodInterceptorImpl.internalInvoke(MethodInterceptorImpl.java:65)
at org.jvnet.hk2.internal.MethodInterceptorImpl.invoke(MethodInterceptorImpl.java:101)
...
我知道错误是在配置期间出现的,没有请求,因此没有头。然而,这就是我困惑的地方。根据,HttpHeaders
是可代理的。因此,在处理请求时,不应该在此处插入代理并委托给实际实例吗?(这种@Context
注入方法似乎在ContainerResponseFilter
和ContainerRequestFilter
类中工作得非常好)
另外,如何基于标头仅运行一个筛选器 请求期间不调用
configure()
。它在配置期间的启动时调用。只有一次。它是否是代理并不重要,它将在没有请求时被调用。@PaulSamsotha在这种情况下,我们不能根据一些请求上下文确定要运行哪个筛选器和要跳过哪个筛选器吗?configure()
在请求期间不被调用。它在配置期间的启动时调用。只有一次。它是否是代理并不重要,它将在没有请求时被调用。@PaulSamsotha在这种情况下,我们不能根据请求上下文确定要运行哪个过滤器和要跳过哪个过滤器吗?