问题描述
对于出站 HTTP 请求,我需要设置密钥库配置。密钥库包含客户端证书。 这是有效的,如果我提供路径为 ;
${app.home}${tls.keystore.relativepath}${client.ssl.keystore}
这里;
tls.keystore.relativepath
和 client.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]
-
${app.home}${tls.keystore.relativepath}++#[p(vars.'app.name' ++'.'++'ssl.keystore')]
-
keystore/ ++ p(vars.'app.name' ++'.'++'ssl.keystore')
-
%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 请求者组件,并使用选择路由器根据客户端类型进行相应的路由。