spring boot 如何配置http和https使用同一端口
时间: 2023-04-06 08:01:04 浏览: 188
Spring Boot 可以通过配置嵌入式 Tomcat 的 Connector 实现 http 和 https 使用同一端口。具体步骤如下:
1. 在 application.properties 文件中添加以下配置:
server.port=8080
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=123456
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat
其中,server.port 指定了 http 的端口号,server.ssl.key-store 指定了证书的路径,server.ssl.key-store-password 指定了证书的密码,server.ssl.keyStoreType 指定了证书的类型,server.ssl.keyAlias 指定了证书的别名。
2. 在启动类中添加以下代码:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(createSslConnector());
return tomcat;
}
private Connector createSslConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("https");
connector.setSecure(true);
connector.setPort(8443);
connector.setProperty("SSLEnabled", "true");
connector.setProperty("sslProtocol", "TLS");
connector.setProperty("keystoreFile", "classpath:keystore.p12");
connector.setProperty("keystorePass", "123456");
connector.setProperty("keyAlias", "tomcat");
return connector;
}
其中,createSslConnector() 方法创建了一个 SSL 连接器,servletContainer() 方法创建了一个嵌入式 Tomcat 容器,并将 SSL 连接器添加到容器中。
3. 运行程序,访问 http://localhost:8080 和 https://localhost:8443 即可。