我有一个spring boot项目,如果我使用私钥(多行文本),它工作得非常好(这意味着密钥没有问题),但当我试图在intellij中将其设置为环境变量时,它会显示出来
原因:房地产的Spring。云配置。服务器吉特。privateKey“”不是有效的私钥
我完全知道这是因为新的线路字符。因此,我尝试用以下内容替换新行\n(作为文本)
-----BEGIN RSA PRIVATE KEY-----\nline1\nline2.....\nlinen\n-----END RSA PRIVATE KEY-----
但它也不起作用。
属性文件中的工作版本为:
privateKey: |
-----BEGIN RSA PRIVATE KEY-----
secret data....
-----END RSA PRIVATE KEY-----
无论使用何种IDE,这都是一个问题。当您将privateKey设置为环境变量(这通常是在生产环境中执行的操作)时,密钥验证将失败,并出现错误。。不是有效的私钥
我是用下面的方式解决这个问题的。
只需在环境变量中传入键的主要内容。例如,如果私钥是:
-----BEGIN RSA PRIVATE KEY-----
{keyContent}
-----END RSA PRIVATE KEY-----
并且环境变量为
githubKey
,githubKey
的值为keyContent
。2.在您的代码中添加环境后处理器实现,以将githubKey
中的内容转换为正确格式化的私钥,并将此格式化值存储在一个新的属性formattedGithubKey
中。
@Component
public class GithubKeyProcessor implements EnvironmentPostProcessor {
private static final String START_PK = "-----BEGIN RSA PRIVATE KEY-----";
private static final String END_PK = "-----END RSA PRIVATE KEY-----";
private static final String LINE_BREAK = "\n";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
String githubKey = environment.getProperty("githubKey");
Map<String, Object> formattedGithubKeyProperties = new HashMap<>();
formattedGithubKeyProperties.put("formattedGithubKey", formatKey(githubKey));
environment.getPropertySources()
.addLast(new MapPropertySource("formattedGithubKeyProperties", formattedGithubKeyProperties));
System.out.println("Done transforming githubKey to the correct format");
}
private String formatKey(String theSshKey) {
if (theSshKey.indexOf(LINE_BREAK) < 0) {
String tmpKey = theSshKey.replace(START_PK, "").replace(END_PK, "").trim();
return START_PK + LINE_BREAK + tmpKey.replaceAll(" ", LINE_BREAK) + LINE_BREAK + END_PK;
} else {
return theSshKey;
}
}
}
请注意,此环境处理器必须在src/main/resources/META-INF/spring中注册。工厂文件,其内容如下所示:
org.springframework.boot.env.EnvironmentPostProcessor={package}.GithubKeyProcessor
spring:
cloud:
config:
server:
git:
private-key: ${formattedGithubKey}
这应该能奏效。
有一个棘手的方法来解决它。
\n
替换为
它变成了这样:
"-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED ...."
IntelliJ环境变量不能支持新行,请参见https://unix.stackexchange.com/q/369972.
如果您决定使用环境变量,那么我认为您最好的选择是使用环境变量指向私钥。
另一个选项是解析环境变量,用实际新行替换出现的\n
。这有点混乱,因为您正在有条件地解析或不解析私钥。
我正在尝试为java设置一个PATH环境变量。当我按照下面的方式设置变量值时,在cmd中输入“java”时,它可以很好地工作 但是对于下面的错误,“java”不被识别为内部或外部命令, 我用的是windows 8。你知道为什么上面的变量不起作用吗?
目标: 使用 Android Studio 附带的(图形)AVD 管理器管理 Android 虚拟设备 (avd),但使用不同的存储文件夹。 默认文件夹:// 想要的文件夹:/ 根据文档,这应该是有效的: (加载在.bashrc中) 这确实适用于命令行: 运行< code > emulator-avd Pixel _ 2 _ API _ 28 也很好。 然而,AVD管理器没有显示任何设备,当我使用
我有sbt多项目,并尝试在子项目的中设置如下: 测试将中止,并显示以下消息: 在测试文件中,我试图得到如下值: Intellj提供如下设置环境变量: 如何设置一个环境变量在为也? 更新 根如下所示: 我还是有例外。
我试图在spring boot应用程序中添加一个环境变量。属性文件。我知道如何在非spring启动项目中正常添加它,但我找不到用于添加环境变量的字段,这就是我所看到的。 这是我的application.properties文件,这可能会有帮助。
问题内容: 我想通过运行程序时设置环境变量。这可能吗? 我试图这样设置: 但是结果消息说FOO不存在。 问题答案: 您必须传递一个包含键 env 的选项对象,该键 env 的值本身就是键值对的对象。
ENV 设置环境变量 格式有两种: ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>... 这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 RUN,还是运行时的应用,都可以直接使用这里定义的环境变量。 ENV VERSION=1.0 DEBUG=on \ NAME="Happy Feet" 这个例子中演示了如何换行,以