我們在寫項目時一般都是用ip就可以直接測試了。但有的業務場景需要我們用到域名。這時候我們去申請一個域名就行了,但此時我們申請的域名協議是http的不是https的。對接微信時很多情況是用的https 。且在對接微信是我們需要邊對接邊調試。如果直接把項目打包到服務器,調試時會很麻煩,所以這篇文章我們要講的是“如果把本地(內網)項目以https協議的方式映射到外網”
一:首先我們先在百度百科了解一下什么是https
HTTPS (全稱:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全為目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性 [1] 。HTTPS 在HTTP 的基礎下加入SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。 HTTPS 存在不同於 HTTP 的默認端口及一個加密/身份驗證層(在 HTTP與 TCP 之間)。這個系統提供了身份驗證與加密通訊方法。它被廣泛用於萬維網上安全敏感的通訊,例如交易支付等方面
從上面我們可以得知 https比http安全一般用於支付,https的安全基礎是SSL。所以我們要配置https協議的時候需要用得到SSL證書。
二 需要准備的環境
我們要做的事情是把本地的Springboot項目通過https 的方式映到外網去。
環境
- springBoot項目
- 域名 (我在阿里雲購買的)
- SSL證明(阿里雲免費申請)
- Ngrok 內網穿透(免費把本地的項目映射到外網)http://www.ngrok.cc/
三,流程圖

1. 瀏覽器輸入域名會訪問的你申請的域名
2. 訪問到底域名會解析到你申請的內網穿透的域名
3. 內網穿透訪問到你本地的項目
4. 你本地項目重定向到443端口
5. 瀏覽器從原來的http變成https
四項目實現
1.首先去阿里雲弄一個免費的SSL證書

這里選擇服務器類型tomcat 因為springboot內嵌了tomcat 用這種方式配置比較簡單
下載后的ssl證書 放到項目里面的resource路徑下
2 Springboot里直接修改 application配置文件
這里一定要注意 是 key-store 和 key-store-password 我在配置時寫成了 key-password 弄了很久沒找到原因

現在實現的效果是
可以用https我們的項目 但是我如果直接輸入域名用http訪問就訪問不到。
因為http是默認80端口 而https 是默認的 443 端口。
所以我在我的啟動類里面寫一段代碼 。訪問http 是自動跳轉到https
EmbeddedServletContainerFactory 可以因為你的spring boot 版本 過高沒有這個class 那么你需要去你對應spring boot版本的class
public class HuahaiApplication {
public static void main(String[] args)
{
SpringApplication.run(HuahaiApplication.class, args);
}
/**
* 配置一個
TomcatServletWebServerFactory bean
* 將http 重定向到 https
* @return
*/
/**
* it's for set http url auto change to https
*/
@Bean
public EmbeddedServletContainerFactory servletContainer(){
TomcatEmbeddedServletContainerFactory tomcat=new TomcatEmbeddedServletContainerFactory(){
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint=new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");//confidential
SecurityCollection collection=new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
//配置http轉https
@Bean
public Connector httpConnector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}
3 我可以把我本地的服務映射到外網去訪問借助一個 sunny-ngrok

去域名管理中心解析你的域名

本地啟動ngrok 的服務

效果
輸入你的域名 不寫https 也會自動跳轉到https 這里是因為我剛剛在啟動類里面配置了 重定向


【免責聲明:本文圖片及文字信息均由千鋒重慶Java培訓小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除。】