Spring Boot 學習筆記(五) 配置Servlet容器
Tomcat配置
因為Spring Boot預設內嵌的Tomcat為servlet容器,所以這裡針對Tomcat配置作詳細介紹,其實本節的配置對Tomcat、Jetty和Undertow都是通用的。
配置Tomcat:
關於Tomcat的所有屬性都在org.springframework.boot.autoconfigure.web.ServerProperties配置類中做了定義,我們只需要在application.properties配置屬性 做配置即可。
通用的Servlet容器配置以”server”作為字首
Tomcat特有配置都以”server.tomcat”作為字首。
更多的相關配置:
servlet容器:
Tomcat:
程式碼配置Tomcat
如果需要通過程式碼的方式配置servlet容器,則可以註冊一個實現EmbeddedServletContainerCustomizer介面的Bean
如果想直接配置Tomcat、Jetty、Undertow:
則直接定義TomcatEmbeddedServletContainerFactory、JettyEmbbedServletContainerFactory、UndertowEmbeddedServletContainerFactory。
一、通用配置:
(1)新建類的配置
(2)當前配置檔案內配置。若要在當前已有的配置檔案內新增類的Bean的話,則在Spring配置中,注意當前類要宣告為static
二、特定配置:
以Tomcat為例(Jetty使用JettyEmbeddedServletContainerFactory,Undertow使用UndertowEmbeddedServletContainerFactory)
替換Tomcat:
只需要把相應的servlet容器的依賴替換,就會自動配置相應的servlet
Tomcat: spring-boot-starter-tomcat
Jetty: spring-boot-starter-Jetty
Undertow: spring-boot-starter-undertow
SSL配置
SSL(Secure Sockets Layer,安全套接層)是為網路通訊提供安全及資料完整性的一種安全協議,SSL在網路傳輸層對網路連線進行加密。
SSL協議位於TCP/IP協議與各種應用層協議之間,為資料通訊提供安全支援。
SSL協議可分為兩層: SSL記錄協議(SSL Record Protocol),他建立在可靠的傳輸協議之上(如TCP)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。
SSL握手協議(SSL Handshake Protocol),建立在SSL記錄協議之上,用於在實際資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。
而在基於B/S的Web應用中,是通過HTTPS來實現SSL的。HTTPS是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即在HTTP下加入SSL層,HTTPS的安全基礎是SSL。
1、生成證書
使用SSL首先需要一個證書,這個證書既可以是自簽名的,也可以是從SSL證書授權中心獲取的。
這裡為了方便,演示自授權證書的生成:
每一個JDK或者JRE裡都有一個工具叫keytool,它是一個證書管理工具,可以用來生成自簽名的證書。
配置好環境變數之後,在控制檯輸入:
keytool -genkey -alias tomcat(因為Spring Boot預設內嵌Tomcat容器)
等全部輸入完之後我們在當前目錄下生成了一個.keystore檔案,這就是我們要用的證書檔案:
2、Spring Boot配置SSL
新增一個index.html到src/main/resources/static下,作為測試。
將.keystore檔案複製到專案的根目錄,然後在application.properties中做如下SSL的設定:
之後做上面講的特定配置,指定埠號和會話時間:
執行之後,發現列印資訊如下:
說明證書,配置檔案都配置成功。
http轉向https:
很多時候我們在位址列輸入的是http,但是會自動轉向到https,要實現這個功能,我們需要配置TomcatEmbeddedServletContainerFactory,並且新增Tomcat的connector來實現。
此時啟動Spring Boot,控制檯輸出效果:
會發現Http已經被重定向。
Favicon配置
Spring Boot提供了一個預設的Favicon,每次訪問應用的時候都能看到:
關閉Favicon
可以在application.properties中設定關閉Favicon,預設為開啟
spring.mvc.favicon.enabled=false
設定自己的Favicon
如果需要設定自己的Favicon,只需要將自己的favicon.ico(檔名不能變動)檔案放置在類路徑根目錄、類路徑META-INF/resources/下、類路徑resources/下、類路徑static/下或類路徑public下。
這裡將favicon.ico放置在src/main/resources/static下:
然後正常訪問即可。