如何在WireMock存根响应体中添加参数并从环境变量注入密钥?
解决WireMock存根中从环境变量注入敏感值的问题
我之前刚好处理过类似的场景,给你一套可行的实现步骤:
1. 先启用WireMock的响应模板功能
响应模板默认是关闭的,你需要在启动WireMock时开启它:
- 命令行启动:
java -jar wiremock-jre8-standalone.jar --enable-response-templating - Java代码集成:
WireMockServer wireMockServer = new WireMockServer(options() .extensions(new ResponseTemplateTransformer(true))); wireMockServer.start();
2. 修改存根JSON,使用模板语法引用环境变量
WireMock的响应模板提供了envVar助手函数,可以直接读取环境变量,还能设置默认值(比如空字符串)。修改后的存根如下:
{ "request": { "method": "GET", "urlPattern": "/path" }, "response": { "status": 200, "jsonBody": [ { "secret": "{{envVar "SECRET_VALUE" ""}}" } ], "headers": { "Content-Type": "application/json" }, "transformers": ["response-template"] } }
这里的关键点:
{{envVar "SECRET_VALUE" ""}}:第一个参数是环境变量名,第二个是默认值(如果变量未设置就用这个值)"transformers": ["response-template"]:指定这个存根启用模板转换(如果全局已经开启,这个可以省略,但加上更稳妥)
3. 设置环境变量并启动WireMock
在启动WireMock前,先设置好环境变量:
- Linux/macOS:
export SECRET_VALUE="your-real-secret-here" - Windows命令行:
set SECRET_VALUE=your-real-secret-here
之后启动WireMock,存根响应里的secret字段就会自动替换成环境变量的值,或者默认的空字符串。
你之前没找到方案可能是没留意到envVar这个内置模板助手,它专门用来处理环境变量的注入场景,刚好匹配你的需求。
内容的提问来源于stack exchange,提问作者AlexD
相关产品推荐
相关产品推荐

