2.12.5. 按资源方法过滤器和 Interceptors


有时,您希望过滤器或拦截器仅针对特定资源方法运行。您可以通过两种不同的方式进行此操作:

实施 DynamicFeature Interface

DynamicFeature 接口包含回调方法,配置(ResourceInfo resourceInfo, FeatureContext context),该命令会针对每个部署的 JAX-RS 方法调用。ResourceInfo 参数包含有关当前正在部署的 JAX-RS 方法的信息。FeatureContext可配置 接口的扩展。您可以使用此参数的 register() 方法绑定您要分配给此方法的过滤器和拦截器。

示例:使用动态功能接口

@Provider
public class AnimalTypeFeature implements DynamicFeature {
    @Override
    public void configure(ResourceInfo info, FeatureContext context) {
        if (info.getResourceMethod().getAnnotation(GET.class) != null)
            AnimalFilter filter = new AnimalFilter();
            context.register(filter);
        }
    }
}

在上例中,您使用 AnimalTypeFeature 注册的提供程序必须实施其中一个接口。本例注册了必须实现以下接口之一的供应商 AnimalFilterContainerRequestFilter、ContainerInterceptor、Reader Interceptor、WriterInterceptorFeature。在这种情况下,AnimalFilter 将应用到所有标有 GET 注解的资源方法。详情请参阅动态功能文档

使用 @NameBinding 注解

@NameBinding 的工作方式与 CDI 拦截器非常相似。您使用 @NameBinding 标注自定义注释,然后将该自定义注释应用到过滤器和资源方法。

示例:使用 @NameBinding

@NameBinding
public @interface DoIt {}

@DoIt
public class MyFilter implements ContainerRequestFilter {...}

@Path("/root")
public class MyResource {

   @GET
   @DoIt
   public String get() {...}
}

详情请参阅 NameBinding 文档

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.