- 版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請注明出處,謝謝。
- 其他相關(guān)文章見:個人博客站點:www.val1ant.xin
1. 說明
由于SpringBoot2新版本的發(fā)布,有些新特性,在此就不一一列舉。由于這些變化,在實際開發(fā)中帶來了一些問題,在此記錄下,避免其他人再掉坑。主要步驟包括:
- 生成證書
- 修改配置文件
- 增加配置類
- 實現(xiàn)HTTP轉(zhuǎn)HTTPS
2. 生成證書
- 獲取證書可通過購買,或者本機生成,以下演示本機生成
- 通過
keytool -genkey alias tomcat生成的.keystore已經(jīng)過時了,不推薦 - 在正確配置完
JDK環(huán)境變量的前提下,在任意目錄,執(zhí)行命令
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 - 按提示填好相關(guān)信息……
- 在當前目錄下會生成一個
keystore.p12文件,即證書文件
3. 修改配置文件
- 將證書文件復制到
Idea中的項目根目錄 - 修改
application.properties文件
# 證書目錄
server.ssl.key-store = keystore.p12
#你之前填好的密碼
server.ssl.key-store-password= password
server.ssl.keyStoreType= PKCS12
server.ssl.keyAlias: tomcat
4. 增加配置類,包括實現(xiàn)HTTP端口轉(zhuǎn)換HTTPS
- 直接看代碼,注意SpringBoot2的新變化
package xin.val1ant.ch7.config;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SSLConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() { //springboot2 新變化
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@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(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
}