2017-08-22 69 views
1

我想要實現在彈簧引導應用SSL其中,我也希望加密(用於測試目的我被基座64編碼它)的密碼密鑰庫,其中我傳遞作爲初始化EmbeddedServletContainerFactory彈簧引導應用程序的JVM參數。Springboot:基於某些標誌

此密碼密鑰存儲到將在下面的方式進行解密以後使用(現在底座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= 

POJO存儲別名和密碼從JVM參數獲得:

@Component 
public class SSLConfig { 

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

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

....getters n setters 
} 

以上配置工作精絕。

現在,我想實現這個基於一些標誌,這將通過JVM參數傳遞說「isSSLEnabled」,設置控制應該流經上面的邏輯,否則它應該以默認的方式工作。

有人可以請指導一下?

回答

2

可以使用Spring Boot的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; 
}