SpringBoot 1.X版本設定Https訪問以及跨域https訪問的問題
最近在做的一個專案中出現了Https域向非Https域傳送ajax請求無法通過的問題
Mixed Content: The page at was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ‘http://127.0.0.1/test‘. This request has been blocked; the content must be served over HTTPS.
而我的專案又正好是springboot專案,所以就去網上查看了一下如何解決這個問題。得到的結果是被訪問的這個網址也必須是https的,所以需要我們獲得被訪問的https證書,由於我的測試地址是本地服務,所以我採用的是本地keytools自己生成證書,如果你的專案是公網的,那麼你可能需要去證書頒發機構獲取證書。
那麼接下老就正式開始配置了。
HTTPS在專案中的使用
首先我們要先獲取到自己生成的證書檔案,可以是.jks或者.keystore或者p12檔案,那麼我們將檔案放到哪裡呢?我們將檔案放到專案的根目錄下就行了 接著就是配置了
HTTPS的配置
SpringBoot中可以在application.properties檔案中進行配置,也可以在程式碼中進行配置,這裡我們選擇在程式碼中進行配置,節省一些不必要的配置
首先我們在啟動類中實現EmbeddedServletContainerCustomizer介面,這個介面允許我們對springboot中內建的tomcat進行自定義的配置,當然這個介面在SpringBoot2.0中有了變化,有興趣的朋友可以關注一下。 實現了EmbeddedServletContainerCustomizer介面之後,需要去實現一個customize方法,在該方法中可以進行一些配置 以下是我的配置
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
Ssl ssl = new Ssl();
//Server.keystore中包含伺服器私鑰和證書
ssl.setKeyStore("server.keystore");
ssl.setKeyStorePassword("zhuofansoft");
container.setPort(8432);
container .setSsl(ssl);
container.setContextPath("/keybord");
}
自此關於Https的配置就告一段落了。
如果你要打包成jar包的話
當你打包成jar包然後使用java -jar啟動之後,可能會提示缺少server.keystore檔案,那麼這個時候你需要將剛剛放到專案根目錄下的server.keystore檔案放一份到與jar包同一目錄下。這樣就可以正常啟動了
如果本地https仍然無法跨域訪問請看這裡
本地https仍然無法正常訪問的原因,可能是我們自己的證書不受信任的原因,那麼我們需要在自己的本地瀏覽器中新增對本地127.0.0.1的httpsy域名證書的信任,具體如何新增請自行搜尋。