使用 Spring Vault returns 状态 400 写入对象:未提供数据
Writing object with Spring Vault returns Status 400 : no data provided
我正在研究如何使用 Vault 0.11.1 和 Spring Vault 2.0.2.RELEASE。我已经设置了一个开发库:
vault server -dev
并添加了一些数据
vault kv put secret/certs/jan cert=ABCD
我可以用 Spring Vault
阅读
@Autowired
private VaultOperations operations;
String path = "secret/data/certs/jan";
System.out.println(operations.read(path).getData());
请注意,奇怪的是,我必须在路径中插入 "data/" 才能再次找到它。
删除数据也能正常工作:
operations.delete(path);
但用
写入数据
Secret secret = new Secret("ABCD");
operations.write(path, secret);
失败
org.springframework.vault.VaultException: Status 400 secret/data/certs/jan: no data provided
秘密是一个简单的豆子:
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Secret {
String cert;
}
而且 jason 转换似乎很顺利:
DEBUG org.springframework.web.client.RestTemplate - Writing [Secret(cert=ABCD)] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@add0edd]
只是想写一个字符串
operations.write(path, "foo=bar");
同样失败:
Status 400 secret/data/certs/jan: failed to parse JSON input: invalid character 'o' in literal false (expecting 'a')
您似乎在使用 Vault 的版本化键值后端。 Vault 0.10 和更新版本的新实例默认将版本化后端安装在 secret/
,这需要您使用特定的 API。
未版本化 (v1) 和版本化 (v2) 键值后端之间存在细微的 API 差异,这些差异向上下文路径和实际 JSON 有效负载添加了额外的元素。
键值后端 v1 示例:
POST /v1/secret/certs/jan
{"key":"value"}
键值后端 v2 示例:
POST /v1/secret/data/certs/jan
{"data":{"key":"value"}}
要使用 Spring Vault,这意味着您需要升级到版本 2.1.0 并使用 VaultKeyValueOperations
API:
VaultKeyValueOperations keyValue = vaultOperations.opsForKeyValue("secret", KeyValueBackend.versioned());
keyValue.put("certs/jan", secret);
我正在研究如何使用 Vault 0.11.1 和 Spring Vault 2.0.2.RELEASE。我已经设置了一个开发库:
vault server -dev
并添加了一些数据
vault kv put secret/certs/jan cert=ABCD
我可以用 Spring Vault
阅读 @Autowired
private VaultOperations operations;
String path = "secret/data/certs/jan";
System.out.println(operations.read(path).getData());
请注意,奇怪的是,我必须在路径中插入 "data/" 才能再次找到它。
删除数据也能正常工作:
operations.delete(path);
但用
写入数据 Secret secret = new Secret("ABCD");
operations.write(path, secret);
失败
org.springframework.vault.VaultException: Status 400 secret/data/certs/jan: no data provided
秘密是一个简单的豆子:
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Secret {
String cert;
}
而且 jason 转换似乎很顺利:
DEBUG org.springframework.web.client.RestTemplate - Writing [Secret(cert=ABCD)] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@add0edd]
只是想写一个字符串
operations.write(path, "foo=bar");
同样失败:
Status 400 secret/data/certs/jan: failed to parse JSON input: invalid character 'o' in literal false (expecting 'a')
您似乎在使用 Vault 的版本化键值后端。 Vault 0.10 和更新版本的新实例默认将版本化后端安装在 secret/
,这需要您使用特定的 API。
未版本化 (v1) 和版本化 (v2) 键值后端之间存在细微的 API 差异,这些差异向上下文路径和实际 JSON 有效负载添加了额外的元素。
键值后端 v1 示例:
POST /v1/secret/certs/jan
{"key":"value"}
键值后端 v2 示例:
POST /v1/secret/data/certs/jan
{"data":{"key":"value"}}
要使用 Spring Vault,这意味着您需要升级到版本 2.1.0 并使用 VaultKeyValueOperations
API:
VaultKeyValueOperations keyValue = vaultOperations.opsForKeyValue("secret", KeyValueBackend.versioned());
keyValue.put("certs/jan", secret);