SpringBoot配置HTTPS,並實現HTTP訪問自動轉HTTPS訪問

推薦使用nginx配置https,因本文產生的任何問題再也不作回覆.

這裏說一下爲何寫這篇文章,由於我也是一個SpringBoot初學者,在配置https的時候遇到了一些坑,根據網上的配置方式,發現一些類已通過時,這裏僅以記錄一下個人配置過程,以供參考.nginx

1.使用jdk自帶的 keytools 建立證書

打開cmd窗口,輸入以下命令spring

keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore

按照提示進行操做apache

輸入密鑰庫口令:123456
再次輸入新口令:123456
您的名字與姓氏是什麼?
  [Unknown]:  kaibowang
您的組織單位名稱是什麼?
  [Unknown]:  yuxuelian
您的組織名稱是什麼?
  [Unknown]:  yuxuelian
您所在的城市或區域名稱是什麼?
  [Unknown]:  chengdu
您所在的省/市/自治區名稱是什麼?
  [Unknown]:  chengdushi
該單位的雙字母國家/地區代碼是什麼?
  [Unknown]:  china
CN=kaibowang, OU=yuxuelian, O=yuxuelian, L=chengdu, ST=chengdushi, C=china是否正確?
  [否]:  y

輸入 <tomcat> 的密鑰口令
        (若是和密鑰庫口令相同, 按回車):
再次輸入新口令:

Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore C:\Users\Administrator\.keystore -destkeystore C:\Users\Administrator\.keystore -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。

建立完成後,可在用戶根目錄查看生成的keystore文件tomcat

2.新建springboot項目,將上一步生成的keystone文件複製到項目的根目錄,在application.properties添加以下配置

server.port=443
server.ssl.key-store=server.keystore
server.ssl.key-alias=tomcat
server.ssl.enabled=true
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS

說明一下springboot

這裏將服務器端口號設置成443端口,即https的默認訪問端口,那麼在進行https訪問的時候能夠不帶端口號直接訪問,若是端口被佔用使用服務器

netstat -ano

查看哪一個進程號佔用了端口,使用app

tasklist|findstr (查看到的進程號)
# simple
C:\Users\Administrator>tasklist|findstr 3664
vmware-hostd.exe              3664 Services                   0      5,040 K

打開任務管理器,殺死佔用進程,或打開對應的應用程序的設置,關閉監聽
至此 https配置完畢 訪問 https://localhost 查看是否配置成功ide

3.http訪問自動轉https訪問

向spring容器中注入兩個Bean,代碼以下post

@Bean
    public Connector connector(){
        Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(80);
        connector.setSecure(false);
        connector.setRedirectPort(443);
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
        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(connector);
        return tomcat;
    }

首先 這裏須要使用 TomcatServletWebServerFactory 這個類,網上清一色的都是使用 EmbeddedServletContainerFactory 這個類.
在新版本的SpringBoot中,我發現已近找不到這個類了,幾經週轉,翻閱源碼,才找到這個類,這也是我爲何寫這篇文章的初衷.
其次在這裏設置http的監聽端口爲80端口,http默認端口,這樣在訪問的時候也能夠不用帶上端口號.
完成以上配置後,咱們訪問 http://localhost 便可自動跳轉爲 https://localhostspa

參考文章:SpringBoot系列(5)---SpringBoot-Web和SpringBoot基礎

做者:御雪戀 連接:https://www.jianshu.com/p/8d4aba3b972d 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索