將SpringBoot項目的HTTP站點改為HTTPS的全過程
一 新建springboot項目
我們先新建一個springboot項目,寫一個BasicController.java,內(nèi)容如下
package com.https.httpsdemo.demos.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
public class BasicController {
// http://127.0.0.1:8081/hello
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello ";
}
}
application.yaml內(nèi)容如下
server: port: 8081
瀏覽器訪問http://127.0.0.1:8081/hello如下
接下來開始把http請求改為https
二 https證書
首先需要有一個 https 證書,可以從各個云服務(wù)廠商處申請一個免費的(我申請的為阿里云SSL),也可以直接借助 Java 自帶的 JDK 管理工具 keytool 來生成一個免費的 https 證書。
找到命令窗口,右鍵選擇管理員打開

執(zhí)行如下命令
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
命令含義如下:
- genkey 表示要創(chuàng)建一個新的密鑰。
- alias 表示 keystore 的別名。
- keyalg 表示使用的加密算法是 RSA ,一種非對稱加密算法。
- keysize 表示密鑰的長度。
- keystore 表示生成的密鑰存放位置。
- validity 表示密鑰的有效時間,單位為天。

如上圖,以此輸入相關(guān)信息即可。
在C:\Windows\System32目錄可以看到生成了文件

把上邊這個文件復(fù)制到項目根目錄下

application.yml文件如下
# 應(yīng)用服務(wù) WEB 訪問端口
server:
port: 8081
ssl:
# 證書路徑,秘鑰文件路徑,也可以配置絕對路徑
key-store: keystore.p12
# 證書密碼,秘鑰生成時在終端輸入的秘鑰口令
key-store-password: 123456
# 秘鑰類型,與秘鑰生成命令一樣
key-store-type: PKCS12
# 證書別名,與秘鑰生成命令一樣
key-alias: tomcat
啟動類添加如下內(nèi)容
package com.https.httpsdemo;
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.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 HttpsDemoApplication {
public static void main(String[] args) {
SpringApplication.run(HttpsDemoApplication.class, args);
}
@Bean
public ServletWebServerFactory servletContainer() {
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(redirectConnector());
return tomcat;
}
/**
* 瀏覽器訪問http://127.0.0.1:8080/hello時,自動跳轉(zhuǎn)到https://127.0.0.1:8081/hello
* @return
*/
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8081);
return connector;
}
}
此時,我們在瀏覽器就可以通過https來訪問https://127.0.0.1:8081/hello了
因為我用的是自己生成的ssl證書,所以https請求是不被客戶端識別的,如下

點擊后,內(nèi)容如下

注意:生產(chǎn)環(huán)境中,則需要購買合法的 SSL 證書。
由于在啟動類已經(jīng)進(jìn)行了配置,所以我們也可以通過訪問http://127.0.0.1:8080/hello來自動跳轉(zhuǎn)到https://127.0.0.1:8081/hello

以上就是將SpringBoot項目的HTTP站點改為HTTPS的全過程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot HTTP站點改為HTTPS的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
深度解析Java中的JSONObject從基礎(chǔ)到高級應(yīng)用
在當(dāng)今前后端分離的架構(gòu)中,JSONObject已成為Java開發(fā)者處理JSON數(shù)據(jù)的瑞士軍刀,本文將深入解析JSONObject的核心機(jī)制與實戰(zhàn)技巧,感興趣的朋友跟隨小編一起看看吧2025-09-09
java根據(jù)負(fù)載自動抓取jstack?dump詳情
這篇文章主要介紹了java根據(jù)負(fù)載自動抓取jstack?dump詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Java實現(xiàn)登錄密碼強(qiáng)度校驗的項目實踐
本文主要介紹了Java實現(xiàn)登錄密碼強(qiáng)度校驗的項目實踐,包括使用正則表達(dá)式匹配校驗和密碼強(qiáng)度校驗工具類這兩種方法,具有一定的參考價值,感興趣的可以了解一下2024-01-01
IDEA “Cannot resolve symbol”爆紅問題解決
最近發(fā)現(xiàn)個問題,IDEA 無法識別同一個 package 里的其他類,將其顯示為紅色,本文就來介紹一下IDEA “Cannot resolve symbol”爆紅問題解決,感興趣的可以了解一下2023-10-10
RocketMQ?ConsumeQueue與IndexFile實時更新機(jī)制源碼解析
這篇文章主要為大家介紹了RocketMQ?ConsumeQueue與IndexFile實時更新機(jī)制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

