70%Java工程師都需要!如何把本地(內網)項目映射到外網


我們在寫項目時一般都是用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 的方式映到外網去。

環境

  1. springBoot項目
  2. 域名 (我在阿里雲購買的)
  3. SSL證明(阿里雲免費申請)
  4. Ngrok 內網穿透(免費把本地的項目映射到外網)http://www.ngrok.cc/

 

三,流程圖

70%Java工程師都需要!如何把本地(內網)項目映射到外網

 

1. 瀏覽器輸入域名會訪問的你申請的域名

2. 訪問到底域名會解析到你申請的內網穿透的域名

3. 內網穿透訪問到你本地的項目

4. 你本地項目重定向到443端口

5. 瀏覽器從原來的http變成https

 

四項目實現​​

1.首先去阿里雲弄一個免費的SSL證書

70%Java工程師都需要!如何把本地(內網)項目映射到外網

 

​這里選擇服務器類型tomcat 因為springboot內嵌了tomcat 用這種方式配置比較簡單

下載后的ssl證書 放到項目里面的resource路徑下

 

2 Springboot里直接修改 application配置文件

這里一定要注意 是 key-store 和 key-store-password 我在配置時寫成了 key-password 弄了很久沒找到原因

70%Java工程師都需要!如何把本地(內網)項目映射到外網

 

現在實現的效果是

可以用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

70%Java工程師都需要!如何把本地(內網)項目映射到外網

 

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

70%Java工程師都需要!如何把本地(內網)項目映射到外網

 

 

本地啟動ngrok 的服務

70%Java工程師都需要!如何把本地(內網)項目映射到外網

 

效果

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

70%Java工程師都需要!如何把本地(內網)項目映射到外網

 

70%Java工程師都需要!如何把本地(內網)項目映射到外網
 
 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM