SpringBoot - 內置的Tomcat服務器配置詳解(附:啟用HTTPS服務)


轉:https://www.hangge.com/blog/cache/detail_2457.html

在 Spring boot 項目中,可以內置 Tomcat、Jetty、Undertow、Netty 等服務器容器。當我們添加了 spring-boot-starter-web 依賴后,默認會使用 Tomcat 作為 Web 容器。

    下面演示如何對這個 Tomcat 進行進一步的配置。
 

1,常規配置

(1)要對 Tomcat 進行進一步的配置,可以在 application.properties 中進行配置:
原文:SpringBoot - 內置的Tomcat服務器配置詳解(附:啟用HTTPS服務)
(2)下面我們修改一些常用的配置,內容如下:
配置說明:
  • server.port:配置 Web 容器的端口號(默認為 8080)
  • server.error.path:配置當前項目出錯時跳轉去的頁面。
  • server.servlet.session.timeout:配置 session 失效時間。30m 表示 30 分鍾,如果不寫單位則默認單位是秒。(注意:由於 Tomcat 中配置 session 過期時間是以分鍾為單位,如果我們這里設置是秒的話,那么會自動轉換為一個不超過所配置秒數的最大分鍾數。比如配置了 119 秒,那么實際 session 過期時間是 1 分鍾)
  • server.servlet.context-path:配置項目名稱(默認為 /),如果配置了項目名稱,那么在訪問路徑中要加上配置的路徑
  • server.tomcat.uri-encoding:配置 Tomcat 請求編碼
  • server.tomcat.max-threads:配置 Tomcat 的最大線程數
  • server.tomcat.basedir:配置 Tomcat 運行日志和臨時文件的目錄。若不配置,則默認使用系統的臨時目錄。
server.port=8081
server.error.path=/error
server.servlet.session.timeout=30m
server.servlet.context-path=/hangge
server.tomcat.uri-encoding=utf-8
server.tomcat.max-threads=500
server.tomcat.basedir=/home/hangge/tmp

(3)重啟后,由於我們配置了 hangge 這個項目名稱,因此需要通過如下地址訪問 /hello 這個接口:

原文:SpringBoot - 內置的Tomcat服務器配置詳解(附:啟用HTTPS服務)

2,HTTPS 配置

    由於 HTTPS 具有良好的安全性,在開發中得到了越來越廣泛的應用。不過一個 HTTPS 證書價格還是有點貴,好在國內一些服務器廠商也有提供免費的 HTTPS 證書。為方便演示,下面我直接使用 jdk 提供的的 Java 數字證書管理工具 keytool 來生成一個證書。


(1)jdk 提供的數字證書管理工具 keytool 在 \jdk\bin 目錄下。我們在終端中執行如下命令自行生成一個數字證書:

命令參數說明:
  • -genkey:表示要創建一個新的密鑰
  • -alias:表示 keystore 的別名
  • -keyalg:表示使用的加密算法是 RSA(一種非對稱加密算法)
  • -keysize:表示密鑰的長度
  • -keystore:表示生成的密鑰存放位置
  • -validity:表示密鑰的有效時間(單位為天)
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore hangge.p12 -validity 365

(2)上述命令執行過程中會要求輸入密鑰口令等信息,我們根據提示一步步輸入即可。最終會在當前目錄下生成一個 hangge.p12 的文件,我們將其復制到項目的根目錄下。

原文:SpringBoot - 內置的Tomcat服務器配置詳解(附:啟用HTTPS服務)
(3)接着在項目 application.properties 中做如下配置:
配置說明:
  • server.ssl.key-store:表示密鑰文件名
  • server.ssl.key-alias:表示密鑰別名
  • server.ssl.key-store-password:即前面創建證書過程中輸入的密碼
server.ssl.key-store=hangge.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=123456

(4)配置完畢重啟項目,這次我們通過 https 地址進行訪問。由於證書是自己生成的,不被瀏覽器認可。

原文:SpringBoot - 內置的Tomcat服務器配置詳解(附:啟用HTTPS服務)
(5)我們點“高級”繼續前進即可,最后運行結果如下:
原文:SpringBoot - 內置的Tomcat服務器配置詳解(附:啟用HTTPS服務)

3,將 HTTP 請求重定向為 HTTPS 請求

(1)經過前面 HTTPS 配置以后,如果我們再用 HTTP 的方式訪問接口,會發現訪問失敗。這是因為 Spring Boot 不支持同時在配置中啟動 HTTP 和 HTTPS。
原文:SpringBoot - 內置的Tomcat服務器配置詳解(附:啟用HTTPS服務)
(2)我們可以在項目中創建一個配置類(TomcatConfig)來實現自動重定向:
代碼說明:我們首先配置一個 TomcatServletWebServerFactory,然后添加一個 Tomcat 中的 Connector(監聽 80 端口),並將請求轉發到 8080 上去。
package com.example.demo;
 
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.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class TomcatConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }
    private Connector createTomcatConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(80);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}

(3)配置完成后,我們在瀏覽器上輸入 “http://localhost:80/hello” 就會自動重定向到“https://localhost:8080/hello”


免責聲明!

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



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