2016-02-01 2 views
2

У меня возник вопрос и поиск примера изменения системного свойства во время выполнения в java. Другими словами, у меня есть отдельная библиотека, которая будет загружать System.setProperty("javax.net.ssl.trustStore", trustStorePath), где значение trustStorePath изменится в соответствии с условием. Если условие изменяется, мне нужно изменить значение trustStorePath и установить Системное свойство.Рекурсивно изменить системное свойство во время выполнения в java

Но история - это когда я устанавливаю значение в первый раз, он сохраняет значение и использует его, даже если я изменяю значение trustStorePath и снова устанавливаю свойство системы. Это изменение не отразилось.

Итак, как я могу сделать то же самое. Ниже приведен пример фрагмента кода для него.

 if (getFile(keyStorePath).exists() && isChanged) { 
       System.setProperty("javax.net.ssl.keyStore", keyStorePath); 
       System.setProperty("javax.net.ssl.keyStoreType", "JKS"); 
       System.setProperty("javax.net.ssl.keyStorePassword", Pwd); 
     }else if (getFile(testMerchantKeyStorePath).exists()) { 
      System.setProperty("javax.net.ssl.keyStore", testMerchantKeyStorePath); 
       System.setProperty("javax.net.ssl.keyStoreType", "JKS"); 
       System.setProperty("javax.net.ssl.keyStorePassword",Pwd); 

    } 
+1

Эй, https://docs.oracle.com/javase/tutorial/essvironment/environment/sysprop.html <- в соответствии с этим эти свойства можно было прочитать один раз, поэтому их изменение не будет сильно (i «все еще не уверен») – Fincio

ответ

2

Похоже, вы хотите использовать динамическое хранилище доверия. Вы можете сделать это, прежде чем открыть любое соединение:

KeyStore ts = KeyStore.getInstance("JKS"); 
    ts.load(new FileInputStream(new File("Your_New_Trust_Store_Path")), "password".toCharArray()); 

    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
    tmf.init(ts); 

    SSLContext sslContext = SSLContext.getInstance("TLS"); 
    sslContext.init(null, tmf.getTrustManagers(), null); 

    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); 

    // Open Connection .... etc. .... 

Вы можете сделать это каждый раз, когда ваши trustStorePath изменения.

Смежные вопросы