我如何才能为特定请求指定一个过滤器?

How can I specific only one filter for a specific request?

我正在使用 JAX-RX 规范来使用 java 构建 Web 服务。 我正在使用 Filter 进行身份验证和授权, JAX-RS 为每个请求调用所有过滤器,我不需要那个 我只需要为某个请求指定一个过滤器 我怎样才能做到这一点 ? 我只想阻止另一个过滤器调用。 我不使用 web.xml,我正在使用 RootClass extend Application Class with @ApplicationPath annotation 像这样:

@ApplicationPath("api")
public class RootEndPoint extends Application {

}

我明白了。
这是我的问题 我会回答的,因为以后有人需要它。
如果你想阻止一些过滤器,你可以通过执行以下步骤使用@NameBinding Annotation:

假设我们有两个过滤器:ManagerUserFilterNormalUser 我想以管理员身份登录,我不想 NormalUserFilter 被叫到 请按照以下步骤操作:

1- 创建注释并使用这些注释:

@NameBinding
@Target({TYPE,METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ManagerFilterResources {}

2- 在 ManagerUserFilter 中使用此注解,就像这样:

@Provider
@ManagerFilterResources
public class ManagerUserFilter implements ContainerRequestFilter,ContainerResponseFilter {
// implementation abstract method in Containers
}

3 - 在 ManagerResource class 中像这样使用此注释

@ManagerFilterResources
@Path("/manager")
public class ManagerResource {

注意:如果您只想在一种方法上应用过滤器,也可以在方法上使用此注释。

4 - 像第一步一样为 NormalUserFilter 创建另一个注释,并将其命名为 NormalUser 作为示例,并像这样在 NormalUserFilter 中使用它:

@NameBinding
@Target({TYPE,METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface NormalUser {}

并在过滤器中使用它

@Provider
@NormalUser
public class NormalUserFilter implements ContainerRequestFilter, ContainerResponseFilter {

// implementation abstract method in Containers

如果您转到 /manager url NormalUserFilter 将不会被调用 希望这个回答对你有用。