首页 > 解决方案 > 如何真正从系统类中清除属性?

问题描述

我正在尝试在两个不同的 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();
    }
}

标签: java

解决方案


推荐阅读