Spring Boot实战(七)Spring Boot 的 Web 开发 7.4 Tomcat配置

本节虽然叫Tomcat配置,但其实指的是servlet容器的配置,因为Spring Boot默认内嵌的Tomcat为servlet容器,所以本节只讲对Tomcat配置,其实本节的配置对Tomcat、Jetty和Undertow都是通过的。
7.4.1 配置Tomcat
关于Tomcat的所有属性都在org.springframework.boot.autoconfikgure.web.SererProperties配置类中定义,我们只需在application.properties配置属性做配置即可。通用Servlet容器配置都以"server"作为前缀,而Tomcat特有配置都以“server.tomcat”作为前缀。下面举一些常用的例子。
配置Servlet容器:

server.port=#配置程序端口,默认为8080
server.session-timout= #用户会话session过期时间,以秒为单位
server.context-path= # 配置访问路径,默认为/

配置Tomcat:

server.tomcat.uri-enconding = # 配置Tomcat编码,默认为UTF-8
server.tomcat.compression= # Tomcat是否开启压缩,默认为关闭off

7.4.2 代码配置Tomcat
如果你需要通过代码的方式配置servlet容器,则可以注册一个实现EmbeddedServletContainerCustomizer接口的Bean;若想直接配置Tomcat、Jetty、Undertow,则可以直接定义TomcatEmbeddedServletContaimerFactory、JettyEmbeddedServletContainerFactory、UndertowEmbeddedServletContainerFactory。

  1. 通用配置
    (1)新建类的配置:
package com.wisely.ch7_4;

import java.util.concurrent.TimeUnit;

import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.ErrorPage;
import org.springframework.http.HttpStatus;

public class CuntomServletContainer implements EmbeddedServletContainerCustomizer {

	@Override
	public void customize(ConfigurableEmbeddedServletContainer container) {
		container.setPort(8888); 
		container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));
		container.setSessionTimeout(10,TimeUnit.MINUTES);  
		
	}

}

(2)当前配置文件内配置。若要在当前已有的配置文件内添加类的Bean的话,则在Spring配置中,注意当前类要声明为static:

package com.wisely;

import java.util.concurrent.TimeUnit;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.ErrorPage;
import org.springframework.http.HttpStatus;


@SpringBootApplication
public class Ch74Application {

	public static void main(String[] args) {
		SpringApplication.run(Ch74Application.class, args);
	}
	
	public static class CuntomServletContainer implements EmbeddedServletContainerCustomizer{

		@Override
		public void customize(ConfigurableEmbeddedServletContainer container) {
			container.setPort(8888);
			container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));
			container.setSessionTimeout(10, TimeUnit.MINUTES);
			
		}
		
	}

}


2.特定配置
下面以Tomcat为例(Jetty使用JettyEmbeddedServletContainerFactory,Undertow使用UndertowEmbeddedServletContainerFactory):

	@Bean
	public EmbeddedServletContainerFactory servletContainer() {
		TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
		factory.setPort(8888);
		factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
		factory.setSessionTimeout(10, TimeUnit.MINUTES);
		return factory;
		
	}

7.4.3 替换Tomcat
Spring Boot默认使用Tomcat作为内嵌Servlet容器,查看spring-boot-starter-web依赖,如图
在这里插入图片描述
如果要使用Jetty或者Undertow为servlet容器,只需修改spring-boot-starter-web的依赖即可。
1.替换为Jetty
在pom.xml中,将spring-boot-starter-web的依赖由spring-boot-starter-tomcat替换为spring-boot-starter-Jetty:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>

此时启动Spring Boot,控制台输出效果如图
在这里插入图片描述
2.替换为Undertow
在pom.xml中,将spring-boot-starter-web的依赖由spring-boot-starter-tomcat替换为spring-boot-starter-undertow:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-undertow</artifactId>
		</dependency>

此时启动Spring Boot,控制台输出效果如图
在这里插入图片描述
7.4.4 SSL配置
SSL的配置也是我们在实际应用中经常遇到的场景
SSL(Secure Sockets Layer,安全套接层)是为网络通信提供安全数据及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol)。它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocl)它建立在SSL记录协议之上,用于在实际数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。而在基于B/S的Web应用中,是通过HTTPS来实现SSL的。HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即在HTTP下加入 SSL层,HTTPS的安全基础是SSL。
因为Spring Boot用的是内嵌的Tomcat,因而我们做SSL配置的时候需要做如下 的操作。
1.生成证书
使用SSL首先需要一个证书,这个证书既可以是自签名的,也可以是从SSL证书授权中心获得的。本例为了演示方便,演示自授权证书的生成。
每一个JDK或者JRE里都有一个工具叫keytool,它是一个证书管理工具,可以用来生成自签名的证书,如图。
在这里插入图片描述
在配置了JAVA_HOME,并将JAVA_HOME的bin目录加入到Path后,即可在控制台用该命令,
在控制台输入如下命令,然后按照提示操作如图

keytool -genkey -alias tomcat

在这里插入图片描述

这是候我们在当前目录下生成了一个.keystore文件,这就是我们要用的证书文件,如图
在这里插入图片描述

  1. Spring Boot配置SSL
     添加一个index.html到 src/main/resources/static 下,作为测试。
     将.keystore文件复制到项目的根目录,然后在application.properties中做如下SSL的配置:
server.port = 8443
server.ssl.key-store = .keystore
server.ssl.key-store-password = 123456
server.ssl.keyStoreType = JKS
server.ssl.keyAlias:tomcat

在这里插入图片描述
此时访问https://localhost:8443,效果如图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40929047/article/details/86661931