將SpringBoot項(xiàng)目的HTTP站點(diǎn)改為HTTPS的全過(guò)程
一 新建springboot項(xiàng)目
我們先新建一個(gè)springboot項(xiàng)目,寫(xiě)一個(gè)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
瀏覽器訪問(wèn)http://127.0.0.1:8081/hello如下
接下來(lái)開(kāi)始把http請(qǐng)求改為https
二 https證書(shū)
首先需要有一個(gè) https 證書(shū),可以從各個(gè)云服務(wù)廠商處申請(qǐng)一個(gè)免費(fèi)的(我申請(qǐng)的為阿里云SSL),也可以直接借助 Java 自帶的 JDK 管理工具 keytool 來(lái)生成一個(gè)免費(fèi)的 https 證書(shū)。
找到命令窗口,右鍵選擇管理員打開(kāi)

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

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

把上邊這個(gè)文件復(fù)制到項(xiàng)目根目錄下

application.yml文件如下
# 應(yīng)用服務(wù) WEB 訪問(wèn)端口
server:
port: 8081
ssl:
# 證書(shū)路徑,秘鑰文件路徑,也可以配置絕對(duì)路徑
key-store: keystore.p12
# 證書(shū)密碼,秘鑰生成時(shí)在終端輸入的秘鑰口令
key-store-password: 123456
# 秘鑰類(lèi)型,與秘鑰生成命令一樣
key-store-type: PKCS12
# 證書(shū)別名,與秘鑰生成命令一樣
key-alias: tomcat
啟動(dòng)類(lèi)添加如下內(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;
}
/**
* 瀏覽器訪問(wèn)http://127.0.0.1:8080/hello時(shí),自動(dòng)跳轉(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;
}
}
此時(shí),我們?cè)跒g覽器就可以通過(guò)https來(lái)訪問(wèn)https://127.0.0.1:8081/hello了
因?yàn)槲矣玫氖亲约荷傻膕sl證書(shū),所以https請(qǐng)求是不被客戶端識(shí)別的,如下

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

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

以上就是將SpringBoot項(xiàng)目的HTTP站點(diǎn)改為HTTPS的全過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot HTTP站點(diǎn)改為HTTPS的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
深度解析Java中的JSONObject從基礎(chǔ)到高級(jí)應(yīng)用
在當(dāng)今前后端分離的架構(gòu)中,JSONObject已成為Java開(kāi)發(fā)者處理JSON數(shù)據(jù)的瑞士軍刀,本文將深入解析JSONObject的核心機(jī)制與實(shí)戰(zhàn)技巧,感興趣的朋友跟隨小編一起看看吧2025-09-09
Nacos配置管理實(shí)踐(手把手教你搭建Nacos集群)
本文詳解Nacos配置管理在微服務(wù)中的實(shí)現(xiàn),包括通過(guò)bootstrap.yml讀取Nacos配置、配置優(yōu)先級(jí)規(guī)則(本地>服務(wù)名>環(huán)境)、熱更新機(jī)制及集群搭建步驟(數(shù)據(jù)庫(kù)初始化、Nginx反向代理),強(qiáng)調(diào)多環(huán)境隔離與容災(zāi)部署優(yōu)化2025-08-08
java根據(jù)負(fù)載自動(dòng)抓取jstack?dump詳情
這篇文章主要介紹了java根據(jù)負(fù)載自動(dòng)抓取jstack?dump詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
JVM加載class文件的原理機(jī)制實(shí)例詳解
Java是一種具有動(dòng)態(tài)性的解釋型語(yǔ)言,類(lèi)(class)只有被加載到JVM后才能運(yùn)行,接下來(lái)通過(guò)本文給大家介紹JVM加載class文件的原理機(jī)制詳解,感興趣的朋友一起看看吧2022-04-04
Java實(shí)現(xiàn)登錄密碼強(qiáng)度校驗(yàn)的項(xiàng)目實(shí)踐
本文主要介紹了Java實(shí)現(xiàn)登錄密碼強(qiáng)度校驗(yàn)的項(xiàng)目實(shí)踐,包括使用正則表達(dá)式匹配校驗(yàn)和密碼強(qiáng)度校驗(yàn)工具類(lèi)這兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
IDEA “Cannot resolve symbol”爆紅問(wèn)題解決
最近發(fā)現(xiàn)個(gè)問(wèn)題,IDEA 無(wú)法識(shí)別同一個(gè) package 里的其他類(lèi),將其顯示為紅色,本文就來(lái)介紹一下IDEA “Cannot resolve symbol”爆紅問(wèn)題解決,感興趣的可以了解一下2023-10-10
RocketMQ?ConsumeQueue與IndexFile實(shí)時(shí)更新機(jī)制源碼解析
這篇文章主要為大家介紹了RocketMQ?ConsumeQueue與IndexFile實(shí)時(shí)更新機(jī)制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

