1. 程式人生 > >SpringBoot2.0專案配置https訪問

SpringBoot2.0專案配置https訪問

要使用https首先我們需要有證書,由於我們自己生成的證書會被多數瀏覽器不信任,所以我們採用申請的免費證書來演示。

一、先來說一說如何申請證書吧

1.登入騰訊雲,選擇雲產品——>SSL證書管理

2.點選申請證書,選擇亞洲誠信,按要求填寫完資訊,提交後大約十分鐘,證書會發到你的郵箱

二、現在我們來為專案配置https

1.下載你所需要型別的證書,並將其放入專案resources目錄下

Windows IIS下的數字證書格式一般為.pfx
Java tomcat 下的數字證書格式一般為.jks或.store
Apache和nginx一般是.pem

2.開啟application.properties配置檔案,新增如下配置

#埠號
server.port=443
#你生成的證書名字
server.ssl.key-store=classpath:放在resources下證書的名字
#金鑰庫密碼
server.ssl.key-store-password=申請證書時新增的祕鑰庫口令
server.ssl.keyStoreType=JKS

這樣我們的https就配置好了,將專案放到申請證書時填入的域名解析到的伺服器上進行測試

三、當用戶訪問http埠的時候,我們需要重定向到https

在啟動類中新增如下兩個方法,更改tomcat配置

@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(initiateHttpConnector());
        return tomcat;
    }

    /**
     * 讓我們的應用支援HTTP是個好想法,但是需要重定向到HTTPS,
     * 但是不能同時在application.properties中同時配置兩個connector,
     * 所以要以程式設計的方式配置HTTP connector,然後重定向到HTTPS connector
     * @return Connector
     */
    private Connector initiateHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(80); // http埠
        connector.setSecure(false);
        connector.setRedirectPort(443); // application.properties中配置的https埠
        return connector;
    }