Java + Spring + Vault: 密码中的汉字,变成了“???”在应用程序中

Java + Spring + Vault: Chinese character in a password, became "???" in the app

关于 Spring Boot 2.4.2 应用程序的小问题,我需要在其中检索存储在 Vault 中的密码,请包含 special/Chinese 个字符。

设置: 存储我们密码的 Hashicorp Vault 实例。到目前为止一切顺利,对于大多数密码,它正在安全地存储它们,我们可以检索它们,非常高兴。

应用程序检索到密码后,它用于向某些第三方发出 http 请求 API。第三方API通过其他渠道给我们密码,我们将其存储在Vault中(问题不在这里)

我们通过这种方式取回密码,使用 Spring Vault 库。

    @Value("${password.from.vault}")
    private String               passwordFromVault;

并以这种方式进行 http 调用

webClient.mutate().baseUrl("https://third-party").build().get().uri("/uri").header("X-the-password", passwordFromVault ).[...] 

当 Vault 中的密码是纯英文字母时,这可以正常工作。

现在,对于某些密码,我们看到它们带有特殊汉字

$ vault kv get secret/creds
====== Data ======
Key         Value
---         -----
password.from.vault    password-新年快乐-password

不幸的是,这似乎会导致问题。 API 调用开始失败,在快速调试会话后,第三方向我们保证他们从他们的日志中看到了这一点

X-the-password: password-????-password

基本上声明,我们没有发送正确的密码(带有 special/Chinese 个字符的密码)

我试过这个,认为这是一个编码问题,但都不起作用

final String  pleaseHelp   = new String(passwordFromVault.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
webClient.mutate().baseUrl("https://third-party").build().get().uri("/uri").header("X-the-password", pleaseHelp ).[...] 

问题,请问如何检索和发送请求,以便第三方 API 获得包含特殊字符的正确密码?

谢谢

如果那些转义的 ascii 字符(例如新年快乐),如果它们是从网络中插入的 UI,则会自动插入为新年快乐。

为了在 运行 时获取它们,应该使用 vault cli 插入它们,例如 \u5317\u4eac