2017-08-22 11 views
1

いくつかのフラグに基づいて初期化EmbeddedServletContainerFactory SpringブートアプリケーションへのJVM引数キーストアへSpringboot:私は、私も私のように渡していたキーストアへのパスワードを、(テスト目的のために、私はベース64で、それをコードしています)を暗号化したい前記スプリングブートアプリケーションでSSLを実装したい

このパスワードは、後で復号化(現在64のデコードをベース用)とオンザフライでEmbeddedServletContainerFactoryを形成するために、以下のように使用されます。

@Bean 
public EmbeddedServletContainerFactory servletContainer() { 
    TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory(); 
    tomcatFactory.setSsl(createSsl()); 
    tomcatFactory.setPort(sslConfig.getHttpsPort()); 
    return tomcatFactory; 
} 
private Ssl createSsl() { 
    Ssl ssl = new Ssl(); 
    try { 
     ssl.setKeyStore("/path/to/keystore.pkcs12"); 
     ssl.setKeyStorePassword(new String(Base64.getDecoder().decode(sslConfig.getKeyPassword()))); 
     ssl.setKeyAlias(sslConfig.getKeyAlias()); 
    } catch (Exception e) { 
     logger.error(e.getMessage()); 
    } 
    return ssl; 
} 

JVM引数:

-Dtls.keyAlias=tomcat 
-Dtls.key-store-password=cGFzc3dvcmQ= 

JVM引数から取得したエイリアスとパスワードを保存するためのPOJO:上記の設定は絶対に正常に動作している

@Component 
public class SSLConfig { 

@Value("#{systemProperties['tls.keyAlias']}") 
public String keyAlias; 

@Value("#{systemProperties['tls.key-store-password']}") 
private String keyPassword; 

....getters n setters 
} 

ここでは、JVMの引数に渡されるフラグに基づいてこれを達成したいと思います。これは、コントロールが上記のロジックを通過するように設定することです。そうでなければデフォルトの方法で動作するはずです。

誰かがこれについてガイドできますか?

答えて

2

SpringブートのConditionalOnProperty注釈を使用して、servletContainer() beanをisSSLEnabledプロパティ/ JVM引数の値で条件付きにすることができます。例えば

@Bean 
@ConditionalOnProperty(name = "isSSLEnabled", havingValue = "true") 
public EmbeddedServletContainerFactory servletContainer() { 
    TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory(); 
    tomcatFactory.setSsl(createSsl()); 
    tomcatFactory.setPort(sslConfig.getHttpsPort()); 
    return tomcatFactory; 
} 

private Ssl createSsl() { 
    Ssl ssl = new Ssl(); 
    try { 
     ssl.setKeyStore("/path/to/keystore.pkcs12"); 
     ssl.setKeyStorePassword(new String(Base64.getDecoder().decode(sslConfig.getKeyPassword()))); 
     ssl.setKeyAlias(sslConfig.getKeyAlias()); 
    } catch (Exception e) { 
     logger.error(e.getMessage()); 
    } 
    return ssl; 
} 
関連する問題

 関連する問題