首先讓我們看一下什麼是HTTPS
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。
我們需要什麼東西呢?
加密的數字證書
這個可以購買,國內某某服務器廠商就有。(富人版本)
下面是窮學生版:
使用keytool工具生成一個數字證書
keytool工具就在jdk的bin目錄下
在cmd中執行命令:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365
命令解釋:
-genkey 表示要創建一個新的密匙
-alias 表示keystore的別名
-keysize表示密匙的長度
-keystore 表示生成的密匙存放位置
-validity 表示密匙的有效時間,單位爲天
根據提示完成後續操作。
命令執行完畢後,會在執行命令的目錄下生成一個名爲sang.p12的文件,將該文件複製到項目的根目錄下,和pom.xml同級
在application.properties中做如下配置:
#密匙文件名
server.ssl.key-store=sang.p12
#表示密匙別名
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=123456
運行項目
此時,在用HTTP訪問接口,就會訪問失敗。
Springboot不支持同事在配置中啓動HTTP和HTTPS。這個時候可以配置請求重定向,將HTTP請求重定向爲HTTPS請求。配置方式如下:
@Configuration
public class TomcatConfig {
@Bean
public Connector connector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8081);
return connector;
}
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
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(connector);
return tomcat;
}
}
將HTTP的8080端口自動重定向到HTTPS的8081端口
參考書:Springboot+Vue全棧開發實戰
在B站看尚硅谷的課,拿這個當參考書,學點技術,準備實習去。