如何在 Jersey 过滤器上设置优先级和注释
How to set priorities and annotations on Jersey filters
假设有两个过滤器和注释如下:
@Provider
@ToTokenFilter
@Priority(1000)
public class TokenFilter implements ContainerRequestFilter {
@Override
public void filter() {
// to do
}
}
@Provider
@ToRootFilter
@Priority(2000)
public class RootFilter implements ContainerRequestFilter {
@Override
public void filter() {
// to do
}
}
@NameBinding
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ToTokenFilter {}
@NameBinding
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ToRootFilter {}
我正在尝试在 class 上使用此过滤器,例如:
@Path("/users")
@ToTokenFilter
@ToRootFilter
public class Users {
@GET
public String getUsers() {
//to do
}
}
这样,我的代码永远不会进入我的 TokenFilter,如果我删除 @ToRootFilter,它最终会进入。但我两者都需要!我需要在 RootFilter 之前调用 TokenFilter。这就是为什么我确实设置了优先级,我试图以两种方式设置价值观的优先级,但没有任何效果。
我尝试将@ToTokenFilter 放在class 上,将@ToRootFilter 放在方法上,但仍然是同样的问题。
有人知道如何在 Jersey 中使用具有优先级和注释的多个过滤器吗?
编辑
这里是web.xml
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>filters.TokenFilter;filters.RootFilter</param-value>
</init-param>
我终于找到问题了:
我正在导入:
import com.sun.jersey.core.util.Priority;
而不是
import javax.annotation.Priority;
但球衣正在使用 java 优先级注释来设置过滤器的优先级。
默认情况下,我所有过滤器的优先级都设置为 5000,我猜顺序是随机的,有时首先使用 TokenFilter,有时使用 RootFilter。
我的 RootFilter 函数正在停止请求,因为它需要在 TokenFilter 中设置一个属性。
假设有两个过滤器和注释如下:
@Provider
@ToTokenFilter
@Priority(1000)
public class TokenFilter implements ContainerRequestFilter {
@Override
public void filter() {
// to do
}
}
@Provider
@ToRootFilter
@Priority(2000)
public class RootFilter implements ContainerRequestFilter {
@Override
public void filter() {
// to do
}
}
@NameBinding
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ToTokenFilter {}
@NameBinding
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ToRootFilter {}
我正在尝试在 class 上使用此过滤器,例如:
@Path("/users")
@ToTokenFilter
@ToRootFilter
public class Users {
@GET
public String getUsers() {
//to do
}
}
这样,我的代码永远不会进入我的 TokenFilter,如果我删除 @ToRootFilter,它最终会进入。但我两者都需要!我需要在 RootFilter 之前调用 TokenFilter。这就是为什么我确实设置了优先级,我试图以两种方式设置价值观的优先级,但没有任何效果。
我尝试将@ToTokenFilter 放在class 上,将@ToRootFilter 放在方法上,但仍然是同样的问题。
有人知道如何在 Jersey 中使用具有优先级和注释的多个过滤器吗?
编辑
这里是web.xml
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>filters.TokenFilter;filters.RootFilter</param-value>
</init-param>
我终于找到问题了:
我正在导入:
import com.sun.jersey.core.util.Priority;
而不是
import javax.annotation.Priority;
但球衣正在使用 java 优先级注释来设置过滤器的优先级。
默认情况下,我所有过滤器的优先级都设置为 5000,我猜顺序是随机的,有时首先使用 TokenFilter,有时使用 RootFilter。 我的 RootFilter 函数正在停止请求,因为它需要在 TokenFilter 中设置一个属性。