[英]Spring boot by default HTTPS but test profile with HTTP
是否可以定義默認properties
文件以啟用https
例如:
server.port: 8443
# SSL Configuration
server.ssl.key-store:/etc/pki/certificate.p12
server.ssl.key-store-password: ${P12PASS}
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: ${KEYALIAS}
server.ssl.trust-store=/etc/pki/trust.jks
server.ssl.trust-store-password=${TRUSTPASS}
但是在沒有任何密鑰庫信息的情況下,以某種方式在8080
端口上使用@Bean
定義為http
執行@Configuration
嗎?
我想使用rest-assured
庫准備一些集成測試,但是當測試加載我的默認應用程序上下文時,我收到與未設置變量(如P12PASS
或TRUSTPASS
相關的錯誤。 我希望集成測試在沒有 https 配置的情況下運行應用程序上下文。
有小費嗎?
另一種方法是為您的應用程序制作雙端口。 一種是用於Http。 另一個用於https。 所以不會影響你的考試。
應用程序.yml
server:
port: 8080
https:
port: 8443
key-store: /etc/pki/certificate.p12
key-store-password: ${P12PASS}
應用
import java.nio.charset.Charset;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
private final static Logger logger = LoggerFactory.getLogger(Application.class) ;
@Value("${https.port}")
int port;
@Value("${https.key-store}")
String storeFile;
@Value("${https.key-store-password}")
String password;
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory ();
tomcat.setUriEncoding(Charset.forName("UTF-8"));
tomcat.addAdditionalTomcatConnectors(createSslConnector());
return tomcat;
}
public Connector createSslConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
connector.setPort(port);
connector.setScheme("https");
connector.setSecure(true);
protocol.setSSLEnabled(true);
protocol.setClientAuth("false");
protocol.setSSLProtocol("TLSv1+TLSv1.1+TLSv1.2");
protocol.setCiphers("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA");
protocol.setKeystoreFile(storeFile);
protocol.setKeystorePass(password);
return connector;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.