150.18. 高级用法


如果您需要对 HTTP 生成者进行更多控制,您应该使用 HttpComponent,您可以在其中设置各种类来为您提供自定义行为。

150.18.1. 设置 MaxConnectionsPerHost

HTTP 组件有一个 org.apache.commons.httpclient.HttpConnectionManager,您可以在其中为给定组件配置各种全局配置。
到全局,我们意味着组件创建的任何端点都有相同的共享 HttpConnectionManager。因此,如果我们希望为每个主机的最大连接设置不同的值,我们需要在 HTTP 组件中定义它,而不是在 我们通常使用的端点 URI 上定义它。以下是:

首先,我们在 Spring XML 中定义 http 组件。是的,我们使用相同的方案名称 http,因为否则 Camel 将自动发现并使用默认设置创建组件。我们需要克服这一点,以便我们可以设置我们的选项。在以下示例中,我们将最大连接设置为 5,而不是默认的 2。

然后我们可以像在我们的路由中一样使用它:

150.18.2. 使用抢占身份验证

最终用户报告他在使用 HTTPS 进行身份验证时遇到了问题。当发现 HTTPS 服务器没有返回 HTTP 代码 401 授权时,这个问题最终会解决。解决方法是设置以下 URI 选项: httpClient.authenticationPreemptive=true

150.18.3. 接受来自远程服务器的自签名证书

请参阅邮件列表中与一些代码讨论中的 此链接,以概述了如何使用 Apache Commons HTTP API 执行此操作。

150.18.4. 为 HTTP 客户端设置 SSL

使用 JSSE 配置实用程序

自 Camel 2.8 起,HTTP4 组件通过 Camel JSSE 配置实用程序 支持 SSL/TLS 配置。这个工具大大减少了您需要写入的组件特定代码数量,并在端点和组件级别进行配置。以下示例演示了如何将 实用程序与 HTTP4 组件一起使用。

此组件中使用的 Apache HTTP 客户端版本解决了全局 "protocol" registry 中的 SSL/TLS 信息。此组件提供了 HTTP 客户端的协议套接字工厂的实施 org.apache.camel.component.http.SSLContextParametersSecureProtocolSocketFactory,以支持使用 Camel JSSE 配置工具。以下示例演示了如何配置协议 registry 并使用路由中的注册协议信息。

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);

ProtocolSocketFactory factory =
    new SSLContextParametersSecureProtocolSocketFactory(scp);

Protocol.registerProtocol("https",
        new Protocol(
        "https",
        factory,
        443));

from("direct:start")
        .to("https://mail.google.com/mail/").to("mock:results");

直接配置 Apache HTTP 客户端

camel-http 组件基于 Apache HTTP 客户端构建,您可以实现自定义 org.apache.camel.component.http.HttpClientConfigurer,以便在需要完全控制 http 客户端上执行一些配置。

但是,如果您只想 指定密钥存储和信任存储,您可以使用 Apache HTTP HttpClientConfigurer 来执行此操作,例如:

Protocol authhttps = new Protocol("https", new AuthSSLProtocolSocketFactory(
  new URL("file:my.keystore"), "mypassword",
  new URL("file:my.truststore"), "mypassword"), 443);

Protocol.registerProtocol("https", authhttps);

然后,您需要创建一个实施 HttpClientConfigurer 的类,并注册 https 协议,提供上例中的密钥存储或信任存储。然后,在 camel route builder 类中可以 hook 类似如下:

HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class);
httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());

如果使用 Spring DSL 执行此操作,您可以使用 URI 指定 HttpClientConfigurer。例如:

<bean id="myHttpClientConfigurer"
 class="my.https.HttpClientConfigurer">
</bean>

<to uri="https://myhostname.com:443/myURL?httpClientConfigurerRef=myHttpClientConfigurer"/>

只要您实施 HttpClientConfigurer,并且配置密钥存储和信任存储,它就可以正常工作。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.