因为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:
如果需要通过代码的方式配置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(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的设置:
之后做上面讲的特定配置,指定端口号和会话时间:
运行之后,发现打印信息如下:
说明证书,配置文件都配置成功。
最后,输入网址:https://localhost:9090
http转向https:
很多时候我们在地址栏输入的是http,但是会自动转向到https,要实现这个功能,我们需要配置TomcatEmbeddedServletContainerFactory,并且添加Tomcat的connector来实现。
此时启动Spring Boot,控制台输出效果:
会发现Http已经被重定向。
最后我们在浏览器输入:
http://localhost:8080
Http会自动被定向到:https://localhost:9090
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下:
然后正常访问即可。