Spring Boot教程30——Tomcat配置

本节的配置方法对Tomcat、Jetty和Undertow等内嵌servlet容器都是通用的。

1.Properties配置Tomcat

关于Tomcat的所有属性都在org.springframework.boot.autoconfigure.web.ServerProperties配置类中做了定义,我们只需在application.properties配置属性做配置即可。通用的Servlet容器配置都以“server”作为前缀,而Tomcat特有配置都以“server.tomcat”作为前缀。例如:

server.port= #配置程序端口,默认为8080
server.session-timeout= #用户会话session过期时间,以秒为单位
server.context-path= #配置访问路径,默认为/
server.tomcat.uri-encoding= #配置tomcat编码,默认为UTF-8
server.tomcat.compression= #Tomcat是否开启压缩,默认为关闭off

2.通过代码配置Tomcat

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

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;
import org.springframework.stereotype.Component;

@Component
public class CustomServletContainer 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);

}
}

在当前已有的配置文件内添加类的Bean的方式

package com.wisely.ch7_4;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Ch74Application {

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

    @Component
    public static class CustomServletContainer implements EmbeddedServletContainerCustomizer{//在Spring配置中注意当前类要声明为static

        @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
public EmbeddedServletContainerFactory servletContainer(){
    TomcatEmbeddedServletContainerFactory factory=new TomcatEmbeddedServletContainerFactory();
    factory.setPort(8888);
    factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));//404.html放置在src/main/resources/static下即可。
    factory.setSessionTimeout(10,TimeUnit.MINUTES);
    return factory;
}

3.替换Tomcat

Spring Boot默认采用Tomcat作为内嵌的Servlet容器,如果要使用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>

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>

4.SSL配置

SSL(Secure Sockets Layer,安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,为高层协议提供数据封装、压缩、加密等功能的支持,用于在实际数据传输开始前对通信双方进行身份认证、协商加密算法、交换加密密钥等。
在基于B/S的Web应用中,是通过https来实现SSL的。

1>.生成证书

使用SSL首先需要一个证书,这个证书既可以是自签名的,也可以是从SSL证书授权中心获得的。本例演示自签名证书的生成。
每一个JDK或者JRE里都有一个工具叫keytool,它是一个证书管理工具,可以用来生成自签名的证书。
在配置了JAVA_HOME,并将JAVA_HOME的bin目录加入到Path后,即可在控制台调用该命令:
keytool -genkey -alias tomcat
?

这个时候我们在当前目录下生成了一个.keystore隐藏文件,这就是我们要用的证书文件。

2>.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

此时启动Spring Boot,控制台输出效果如下:
?

访问https://localhost:8443

3>.http转向https

很多时候,我们访问http://www.baidu.com,但会自动转向https://www.baidu.com。要实现这个功能,我们需配置TomcatEmbeddedServletContainerFactory,并且添加Tomcat的connector来实现。
这时我们需要在配置文件里增加如下配置:

package com.wisely.ch7_4;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Ch74Application {

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

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
      TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
          @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);
          }
        };

      tomcat.addAdditionalTomcatConnectors(httpConnector());
      return tomcat;
    }
    @Bean
    public Connector httpConnector() {
      Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
      connector.setScheme("http");
      connector.setPort(8080);
      connector.setSecure(false);
      connector.setRedirectPort(8443);
      return connector;
    }
}
时间: 2024-11-03 21:36:19

Spring Boot教程30——Tomcat配置的相关文章

Spring Boot教程31——Favicon配置

1.默认的Favicon Spring Boot提供了一个默认的favicon,每次访问应用的时候都能看到. ? 2.关闭Favicon 可在application.properties中设置关闭Favicon spring.mvc.favicon.enabled=false ? 3.设置自己的Favicon 只需将自己的favicon.ico文件放置在类路径根目录.类路径META-INF/resources/下.类路径resources/下.类路径static/下或类路径public/下即可.

Spring Boot 探索系列 - 自动化配置篇

26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging,Log4J, Log4J2 an

Spring Boot教程35——Spring Data JPA

Hibernate是数据访问解决技术的绝对霸主.JPA是由Hibernate主导的一个基于O/R映射的标准规范.O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关的技术. Spring Data JPA介绍 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义一个继承JpaRepository的接口即可: public interface PersonRepository extends Jpa

Spring Boot教程 - 1. 简介

一.导览 本文主要介绍以下几部分: 1. 什么是Spring Boot? 2. 为什么使用Spring Boot? 3. Spring Boot提供哪些功能? 4. 如何使用Spring Boot? 5. Spring Boot有哪些不足? 二.什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 该框架使用了特定的方式(继承starter,约定优先于配置)来进行配置,从而使开发人员不再需要定义

spring boot slf4j日记记录配置详解

转 spring boot slf4j日记记录配置详解 2017年12月26日 12:03:34 阅读数:1219 Spring-Boot--日志操作[全局异常捕获消息处理?日志控制台输出+日志文件记录] 最好的演示说明,不是上来就贴配置文件和代码,而是,先来一波配置文件的注释,再来一波代码的测试过程,最后再出个技术在项目中的应用效果,这样的循序渐进的方式,才会让读者更加清楚的理解一项技术是如何运用在项目中的,虽然本篇很简单,几乎不用手写什么代码,但是,比起网上其他人写的同类型的文章来说,我只能

Spring Boot 教程

目录 1.什么是Spring boot starter template 2.Spring boot 自动配置 3.嵌入式Web Server 4.启动应用程序 Spring boot是一个Spring框架模块,它为Spring框架提供RAD(快速应用程序开发)功能.它高度依赖于启动器模板功能,该功能非常强大且完美无缺. 1.什么是Spring boot starter template Spring Boot Starter包含启动特定功能所需的所有相关依赖关系的集合的模板.比如,我们自己创建

学记:为spring boot写一个自动配置

spring boot遵循"约定由于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇不是借助代码的生成来实现的,而是通过条件注解来实现的. 自动配置AutoConfiguration是实现spring boot的重要原理,理解AutoConfiguration的运行原理特别重要,自己写一个AutoConfiguration可以加深我们对spring boot的理解. 1.定义Type-saf

spring boot 发布到tomcat

1.pom.xml 中增加 <!-- 打包到tomcat 1--> <packaging>war</packaging> 移除spring boot 中的tomcat <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions>

【视频分享】Spring Boot 教程全集

# [视频分享]Spring Boot 教程全集 ## 获取方式 **方式一:****链接:**[百度网盘](https://pan.baidu.com/s/137KFcoCE-i75vA8FE_OYFQ)==关注公众号极客萧(xiaoyxyj),并且回复关键字:springboot 即可获取下载链接和提取码(注意大小写别错)====如果链接失效,请及时联系我== 原文地址:https://www.cnblogs.com/icefirebug/p/11784818.html