第 59 章 配置端点以使用拦截器

摘要

当端点中包含在消息交换中时,拦截器会添加到端点。端点的拦截器链由 Apache CXF 运行时中多个组件的拦截器链组成。拦截器在端点的配置或其中一个运行时组件的配置中指定。可以使用配置文件或拦截器 API 添加拦截器。

59.1. 确定何时附加拦截器

概述

有多个运行时对象托管拦截器链。包括:

  • 端点对象
  • 服务对象
  • 代理对象
  • 用于创建端点或代理的 factory 对象
  • 绑定
  • 中央 总线 对象

开发人员可以将自己的拦截器附加到这些对象。附加拦截器的最常见对象是总线和单个端点。选择正确的对象需要了解这些运行时对象如何组合组成端点。按照设计,每个 cxf 相关捆绑包都有自己的 cxf 总线。因此,如果在总线中配置了拦截器,且同一 Blueprint 上下文中的服务会被导入或创建到另一个捆绑包中,则拦截器不会被处理。您可以将拦截器直接配置到导入服务的 JAXWS 客户端或端点。

端点和代理

将拦截器附加到端点或代理是放置拦截器的最精细方式。任何直接连接到端点或代理的拦截器都仅影响特定的端点或代理。这是附加特定于某个服务的拦截器的好位置。例如,如果开发人员想要公开一个服务实例,可将单元从指标转换为阻碍,将拦截器直接附加到一个端点。

工厂

使用 Spring 配置将拦截器附加到用于创建端点的工厂,或者代理与将拦截器直接附加到端点或代理的效果相同。但是,当将拦截器附加到工厂时,以编程方式附加到工厂的拦截器会传播到工厂创建的每个端点或代理。

绑定

将拦截器附加到绑定可让开发人员指定一组应用于使用绑定的所有端点的拦截器。例如,如果开发人员想要强制所有使用 raw XML 绑定的端点包含特殊 ID 元素,他们可以将元素关联到 XML 绑定。

总线

附加拦截器的最常规位置是总线。当拦截器附加到总线时,拦截器会传播到该总线管理的所有端点。在创建一个共享类似拦截器集的多个端点的应用程序中,将拦截器附加到总线时很有用。

组合附件点

由于端点的最终拦截器链集是所列出对象所代表的拦截器链,因此多个列出的对象可以合并为一个端点的配置。例如,如果应用程序生成了多个端点,则所有需要检查验证令牌的拦截器都会被附加到应用程序的总线中。如果其中某一端点还需要将 Euros 转换为资金的拦截器,则转换拦截器会直接附加到特定的端点。