java - 如何真正从系统类中清除属性?
问题描述
我正在尝试在两个不同的 Web 服务器上对 REST 服务进行请求。在两台服务器上都需要提供一个 keyStore,显然它们是不同的 keyStore。运行下面的代码,我仅在第一个请求(对于测试环境)中成功,但是当我执行第二个请求(对于暂存环境)时,请求会显示第一个 keyStore,在本例中为 testKeyStore.jks。
我试图清除 System 类的 keyStore 属性并设置一个新值。在 println 中,它显示为好像属性已更改,但是当我在登台服务器上看到日志时,显示的是testKeyStore,而不是stagingKeyStore。
如果我在doStaff()方法中更改顺序,首先是 STAGING,然后是 TEST,第二个请求会失败,因为测试服务器中存在 stagingKeyStore。
有什么办法可以解决这个问题吗?
public void doStaff() {
callServer("TEST");
callServer("STAGING");
}
private void callServer(String enviroment) {
String url = "";
if ("TEST".equalsIgnoreCase(enviroment))
url = "https://test-server/dostaff";
else if("STAGING".equalsIgnoreCase(enviroment))
url = "https://staging-server/dostaff";
try {
System.clearProperty("javax.net.ssl.keyStore");
System.out.println(enviroment + " -> " + System.getProperty("javax.net.ssl.keyStore"));
if ("TEST".equalsIgnoreCase(enviroment)) {
System.setProperty("javax.net.ssl.keyStore", "C:\\temp\\testKeyStore.jks");
} else if("STAGING".equalsIgnoreCase(enviroment)) {
System.setProperty("javax.net.ssl.keyStore", "C:\\temp\\stagingKeyStore.jks");
}
System.out.println(enviroment + " -> " + System.getProperty("javax.net.ssl.keyStore"));
//...
} catch (Exception e) {
e.printStackTrace();
}
}
解决方案
推荐阅读
- azure - 应用洞察记录——只记录我所说的,不记录其他
- reactjs - 与上下文反应,减少调度样板
- javascript - JavaScript 不适用于 HTML 文件 (Express)
- javascript - react native:将类组件更改为功能组件和挂钩的方法是什么?
- mongodb - mongodb - 将嵌套对象数组合并为一个保留所有数据的数组
- ruby - 我正在尝试通过 rbenv build on mac os catalina 安装 ruby-2.2.3 但收到以下错误
- firebase - Firebase 抛出“服务器以状态 400 响应”
- angular - Angular 指令更改元素的输入
- javascript - Mongo 认为 10 月 1 日和 2 日是不同的月份
- azure-sql-database - CTE 不适用于 azure sql,但适用于普通 sql server