Maven中Pact Groovy内联脚本如何导入依赖获取认证令牌
解决Pact JVM请求过滤器中动态获取认证令牌的问题
由于Groovy支持直接使用全限定类名调用类(无需显式导入),你可以直接在<requestFilter>的内联脚本中通过完整类路径调用Secrets Manager相关工具类,实现动态获取认证令牌的需求。
以下是修改后的pom.xml配置示例(以AWS Secrets Manager为例):
<serviceProvider> <name>MyAPI</name> <requestFilter> // 初始化AWS Secrets Manager客户端(全限定类名调用) def secretsManager = com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder.defaultClient() // 构造获取秘密的请求 def smRequest = new com.amazonaws.services.secretsmanager.model.GetSecretValueRequest().withSecretId("your-secret-id") // 获取秘密内容 def secretValue = secretsManager.getSecretValue(smRequest).getSecretString() // 解析JSON格式的秘密(如果令牌存储在JSON结构中) def secretJson = new groovy.json.JsonSlurper().parseText(secretValue) def authToken = secretJson.authToken // 设置Authorization请求头 request.setHeader('Authorization', "Bearer ${authToken}") </requestFilter> <pactBrokerUrl>https://pact.myapie.com</pactBrokerUrl> <protocol>https</protocol> <port>443</port> <host>api.com</host> </serviceProvider>
关键注意事项
- 依赖配置:确保你的pom.xml中已添加对应Secrets Manager的SDK依赖(比如AWS Secrets Manager需要
aws-java-sdk-secretsmanager依赖) - 变量名避免冲突:脚本中不要使用
request作为自定义变量名,避免覆盖Pact提供的请求对象 - 适配其他Secrets Manager:如果使用HashiCorp Vault或其他服务商的工具,只需替换对应的全限定类名及调用逻辑即可
- 权限配置:运行测试的环境需具备访问目标Secrets Manager的权限(比如AWS需配置IAM角色或环境变量凭证)
- 非JSON格式秘密:如果令牌直接以纯文本存储,可跳过JSON解析步骤,直接使用
secretValue作为令牌值
内容的提问来源于stack exchange,提问作者Gowtham
相关产品推荐
相关产品推荐

