SpringBoot - 啟用https


1、 生成SSL證書(使用 Java jdk 自帶的工具 keytool)

找到jdk的安裝路徑(注意:這里是我本地的路徑...)

 

 

​ 假設你已經配置了 JDK的環境變量,可以 忽略這下面的這一步。

 

 

2、輸入命令生成證書

keytool -genkeypair -alias server_https -keypass oukele -keyalg RSA -keysize 1024 -validity 365 -keystore D:/server_https.keystore -storepass oukele
-alias 別名
-keypass 指定生成密鑰的密碼
-keyalg 指定密鑰使用的加密算法(如 RSA)
-keysize 密鑰大小
-validity 過期時間,單位:天
-keystore 指定存儲密鑰的 密鑰庫的生成路徑、名稱。
-storepass 指定訪問密鑰庫的密碼。

 

 

 

有警告提示的話,根據它的提示再操作一遍即可。

 

 

3、springboot 項目 配置 https

 

 

server:
# https 配置
ssl:
# 是否啟用 ssl 支持 (默認是 true)
#enabled: true
# 密鑰庫的路徑
key-store: classpath:server_https.keystore
# 密鑰庫類型
key-store-type: JKS
# 密鑰庫中密鑰的別名
key-alias: server_https
# 用於訪問密鑰庫中密鑰的密碼
key-password: oukele
# 用於訪問密鑰庫的密碼
key-store-password: oukele
# 項目訪問的端口
port: 8088
# 用於 非ssl請求 強制轉成 ssl 請求
# 當使用 訪問地址:http://127.0.0.1:8089/hello 訪問時 后台會 將請求 轉換成 https://127.0.0.1:8088/hello
non-ssl-port: 8089

 

 

server_https.keystore 存放的位置

 

 

4、編寫一個簡單的測試控制類 ,啟動訪問進行訪問

控制類:

 

 

進行訪問結果:

 

 

 

 

5、http強制跳轉https

 

新增一個 httpToHttpsConfig 類

package com.oukele.https.config;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author oukele
 * http 請求 強制跳轉成 https
 */
@Configuration
public class HttpToHttpsConfig {


    /**
     * 項目指定的端口號
     */
    @Value("${server.port}")
    private int serverPort;

    /**
     * 用於 非ssl請求 強制轉成 ssl 請求 的端口號
     */
    @Value("${server.non-ssl-port}")
    private int port;

    @Bean
    public TomcatServletWebServerFactory servletContainerFactory() {
        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);
            }
        };
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //設置將分配給通過此連接器接收到的請求的方案
        connector.setScheme("http");

        //true: http使用http, https使用https;
        //false: http重定向到https;
        connector.setSecure(false);

        //設置監聽請求的端口號,這個端口不能其他已經在使用的端口重復,否則會報錯
        connector.setPort(port);

        //重定向端口號(非SSL到SSL)
        connector.setRedirectPort(serverPort);

        tomcat.addAdditionalTomcatConnectors(connector);
        return tomcat;
    }
}
View Code

 

 

重新啟動項目,進行訪問

例如 瀏覽器輸入 http://127.0.0.1:8089/hello , 項目會自動將 該請求 轉換成 https://127.0.0.1:8088/hello 請求。


 

源碼地址:https://gitee.com/oukele/springboot-demo/tree/master/https

 


免責聲明!

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



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