如何为 Mule 4 中的 TLS 上下文设置提供动态“路径”?

问题描述

对于出站 HTTP 请求,我需要设置密钥库配置。密钥库包含客户端证书。 这是有效的,如果我提供路径为 ;

${app.home}${tls.keystore.relativepath}${client.ssl.keystore}

这里; tls.keystore.relativepathclient.ssl.keystore properties属性文件中定义。

例如: 在属性文件中;

tls.keystore.relativepath=/keystore/
client.ssl.keystore=client_certificate.p12

但我的要求是, HTTP 请求是一个通用请求,该程序会将请求路由到不同的端点。所以,key store文件在运行时也不同。

例如: 在我将定义的属性文件中;

client.ssl.keystore=client_certificate.p12
client2.ssl.keystore=client2_certificate.p12

为了在运行时确定 'client' 或 'client2' 字,我定义了一个变量,它检查请求并将值保持为 'client' 或 client2'。

因此,为了在 TLS 上下文/密钥存储配置下定义“路径”值,我尝试了几种组合。但没有运气。[1,2,3]

  1. ${app.home}${tls.keystore.relativepath}++#[p(vars.'app.name' ++'.'++'ssl.keystore')]

  2. keystore/ ++ p(vars.'app.name' ++'.'++'ssl.keystore')

  3. %dw 2.0

    输出应用程序/java


    keystore/ ++ p(vars.'app.name' ++'.'++'ssl.keystore')

谁能为我提供这种动态路径配置的解决方案?

解决方法

您可以使用以下示例动态引用属性

%dw 2.0
output application/json
var appName="test-app"
var keystore="client-cert.p12"
var finalProp=appName ++ keystore
---
Mule::p(finalProp)

然而,HTTP 请求者配置 (TLS) 的部分不考虑动态值,需要引用静态属性或硬编码值。因此,您必须在流程中使用多个 HTTP 请求者组件,并使用选择路由器根据客户端类型进行相应的路由。