Spring Boot学习(8):Spring Boot Tomcat配置

目录

前言

Tomcat

一、配置Tomcat

二、替换Tomcat为Jetty

三、替换Tomcat为Undertow

SSL

一、生成证书

二、SpringBoot配置SSL

三、http转向https

示例代码下载地址


前言

Spring Boot默认内嵌 Tomcat 为 servlet 容器,同时也支持Undertow和Jetty。

本文示例代码:https://github.com/lizitaowork/SpringBoot-demo.git

Tomcat

一、配置Tomcat

1、普通servlet配置:都是以 server.* 形式在application.properties中配置:

#配置程序端口,默认为8080
server.port=8888
#配置访问路径,默认为/
server.servlet.context-path=/tomcat

2、Tomcat配置:都是以 server.tomcat.* 形式在application.properties中配置:

#配置tomcat编码,默认为UTF-8
server.tomcat.uri-encoding=UTF-8

更多Tomcat的属性配置,各位博友可以在spring-boot-autoconfigure包下的 ServerProperties.java中查看,在此不再赘述。

二、替换Tomcat为Jetty

先来看一下 spring-boot-starter-web 的pom.xml中的依赖:



  4.0.0
  
    org.springframework.boot
    spring-boot-starters
    2.0.3.RELEASE
  
  org.springframework.boot
  spring-boot-starter-web
  2.0.3.RELEASE
  Spring Boot Web Starter
  Starter for building web, including RESTful, applications using Spring
		MVC. Uses Tomcat as the default embedded container
  https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-web
  
    Pivotal Software, Inc.
    https://spring.io
  
  
    
      Apache License, Version 2.0
      http://www.apache.org/licenses/LICENSE-2.0
    
  
  
    
      Pivotal
      [email protected]
      Pivotal Software, Inc.
      http://www.spring.io
    
  
  
    scm:git:git://github.com/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-web
    scm:git:ssh://[email protected]/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-web
    http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-web
  
  
    Github
    https://github.com/spring-projects/spring-boot/issues
  
  
    
      org.springframework.boot
      spring-boot-starter
      2.0.3.RELEASE
      compile
    
    
      org.springframework.boot
      spring-boot-starter-json
      2.0.3.RELEASE
      compile
    
    
    
      org.springframework.boot
      spring-boot-starter-tomcat
      2.0.3.RELEASE
      compile
    
    
      org.hibernate.validator
      hibernate-validator
      6.0.10.Final
      compile
    
    
      org.springframework
      spring-web
      5.0.7.RELEASE
      compile
    
    
      org.springframework
      spring-webmvc
      5.0.7.RELEASE
      compile
    
  

 发现 spring-boot-starter-tomcat 在依赖列表中,如果要使用Jetty,只需要修改 spring-boot-starter-web 的依赖即可:


    
        org.springframework.boot
        spring-boot-starter-web
        
            
                org.springframework.boot
                spring-boot-starter-tomcat
            
        
    

    
        org.springframework.boot
        spring-boot-starter-jetty
    

启动Spring boot,控制台效果如下:

Spring Boot学习(8):Spring Boot Tomcat配置_第1张图片

三、替换Tomcat为Undertow

同理,修改 spring-boot-starter-web 依赖:


    
        org.springframework.boot
        spring-boot-starter-web
        
            
                org.springframework.boot
                spring-boot-starter-tomcat
            
        
    

    
        org.springframework.boot
        spring-boot-starter-undertow
    

启动Spring Boot,控制台效果如下: 

SSL

SSL配置也是我们在实际开发中经常遇到的场景,在Web引用中,是通过Https来实现SSL的,Https是以安全为目标的Http通道,简单来说就是安全版的Http。

一、生成证书

使用Java自带的命令keytool命令来生成,生成命令如下:

keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

#参数说明如下:
# -storetype 指定密钥仓库类型 
# -keyalg 生证书的算法名称,RSA是一种非对称加密算法 
# -keysize 证书大小 
# -keystore 生成的证书文件的存储路径 
# -validity 证书的有效期

输入命令,按照提示,一步步生成秘钥 :

$ keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  zitao.li
您的组织单位名称是什么?
  [Unknown]:  company
您的组织名称是什么?
  [Unknown]:  organization
您所在的城市或区域名称是什么?
  [Unknown]:  beijing
您所在的省/市/自治区名称是什么?
  [Unknown]:  beijing
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CH
CN=zitao.li, OU=company, O=organization, L=beijing, ST=beijing, C=CH是否正确?
  [否]:  y

 将生成的秘钥放到项目的根目录下:

Spring Boot学习(8):Spring Boot Tomcat配置_第2张图片

二、SpringBoot配置SSL

在application.properties中配置SSL:

#tomcat端口
server.port=8888
#秘钥路径
server.ssl.key-store=keystore.p12
#密码(即生成秘钥时输入的密码)
server.ssl.key-store-password=111111
#秘钥类型
server.ssl.keyStoreType=PKCS12
#别名
server.ssl.keyAlias:ailas

运行Spring Boot,控制台详情如下: 

三、http转向https

很多时候,我们在浏览器地址栏中输入的是http,但会自动转向https,例如我们访问百度的时候:

Spring Boot学习(8):Spring Boot Tomcat配置_第3张图片

Spring Boot学习(8):Spring Boot Tomcat配置_第4张图片

要实现此功能,我们需要配置 TomcatServletWebServerFactory (我的Spring Boot版本是2.0.3,低版本的Spring Boot应该配置TomcatEmbeddedServletContainerFactory), 并添加tomcat的connector来实现:

@Configuration
public class HttpsConfigure {
    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                //confidential
                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监听的http的端口号
        connector.setPort(8080);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(8888);
        return connector;
    }
    
}

启动Spring Boot,控制台效果如下:

浏览器中访问效果: 

Spring Boot学习(8):Spring Boot Tomcat配置_第5张图片

Spring Boot学习(8):Spring Boot Tomcat配置_第6张图片

示例代码下载地址

https://github.com/lizitaowork/SpringBoot-demo.git

你可能感兴趣的:(Spring,Boot)