Рекурсивно изменить системное свойство во время выполнения в java

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

Но история в том, что когда я устанавливаю значение в первый раз, оно сохраняет значение и использует его, даже если я изменяю значение 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);

    }

person Sumit Patel    schedule 01.02.2016    source источник
comment
Здравствуйте, docs.oracle.com/javase/tutorial/essential/environment/ ‹-- в соответствии с этим, эти свойства могут быть прочитаны один раз, поэтому их изменение мало что даст (хотя я все еще не уверен')   -  person Fincio    schedule 01.02.2016


Ответы (1)


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

    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 меняется.

person always_a_rookie    schedule 09.02.2016