搜索

第 61 章 JAX-RS 2.0 Filters 和 Interceptors

download PDF

摘要

JAX-RS 2.0 为 REST 调用定义了安装过滤器和拦截器的标准 API 和语义。过滤器和拦截器通常用于提供日志记录、身份验证、授权、消息压缩、消息加密等功能。

61.1. JAX-RS 过滤器和 Interceptors 简介

概述

本节概述了 JAX-RS 过滤器和拦截器的处理管道,突出显示可能安装过滤器链或拦截器链的扩展点。

过滤器

JAX-RS 2.0 过滤器 是一类插件,使开发人员能够访问通过 CXF 客户端或服务器传递的所有 JAX-RS 消息。过滤器适合处理与消息关联的元数据:HTTP 标头、查询参数、介质类型和其他元数据。过滤器具有中止消息调用的功能(例如,对于安全插件很有用)。

如果您愿意,您可以在每个扩展点处安装多个过滤器,在这种情况下,在链中执行过滤器(执行顺序未定义,除非为每个安装的过滤器指定了 优先级值 )。

拦截器

JAX-RS 2.0 拦截器 是一类插件,使开发人员能够访问消息正文,因为它正在读取或写入。拦截器嵌套在 MessageBodyReader.readFrom 方法调用中(用于读取拦截器)或 MessageBodyWriter.writeTo 方法调用(用于 writer interceptors)。

如果您愿意,您可以在每个扩展点处安装多个拦截器,在这种情况下,在链中执行拦截器(执行顺序未定义,除非为每个安装的拦截器指定了 优先级值 )。

服务器处理管道

图 61.1 “server-Side Filter 和 Interceptor Extension Points” 显示了在服务器端安装的 JAX-RS 过滤器和拦截器的处理管道的概述。

图 61.1. server-Side Filter 和 Interceptor Extension Points

jaxrs20filters 01

服务器扩展点

在服务器处理管道中,您可以在以下扩展点中添加过滤器(或拦截器):

  1. PreMatchContainerRequest 过滤器
  2. ContainerRequest 过滤器
  3. ReadInterceptor
  4. ContainerResponse 过滤器
  5. WriteInterceptor

请注意,发生资源匹配 会达到 PreMatchContainerRequest 扩展点,因此此时将无法使用一些上下文元数据。

客户端处理管道

图 61.2 “client-Side Filter 和 Interceptor Extension Points” 显示在客户端端安装的 JAX-RS 过滤器和拦截器的处理管道的概述。

图 61.2. client-Side Filter 和 Interceptor Extension Points

jaxrs20filters 02

客户端扩展点

在客户端处理管道中,您可以在以下扩展点中添加过滤器(或拦截器):

  1. ClientRequest 过滤器
  2. WriteInterceptor
  3. ClientResponse filter
  4. ReadInterceptor

过滤和拦截器顺序

如果您在同一扩展点安装多个过滤器或拦截器,过滤器的执行顺序取决于分配给它们的优先级(在 Java 源中使用 @Priority 注解)。优先级以整数值表示。通常,优先级较高的 过滤器会更接近服务器端的资源方法调用;而具有 较低优先级 数字的过滤器则更接近客户端调用。换句话说,过滤器和拦截器 在请求 消息上执行,按优先级号的 降序 执行;而对响应消息的过滤器和拦截器操作则按优先级号 降序 执行。

过滤类

可以实施以下 Java 接口以创建自定义 REST 消息过滤器:

拦截器类

可以实施以下 Java 接口以创建自定义 REST 消息拦截器:

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.