Spring Boot第七章-Spring Boot Web配置-Tomcat配置

本章介绍tomcat的配置

1.配置tomcat

直接在application配置文件中配置即可,servlet容器配置以server为前缀,而tomcat的特有配置以server.tomcat为前缀,至于有哪些参数可以在实际工作中需要了再找。配置例子:

server.port=8443
#配置session过期时间,spring boot2带上时间单位
server.servlet.session.timeout=5s
server.servlet.context-path=/

server.tomcat.uri-encoding=UTF-8

2.代码配置

这个可以在后面的ssl配置中看到例子,其实不常用,配置文件配置就好。

3.替换tomcat

很简单,比如替换成Jetty,只需要加入spring-boot-starter-jetty的依赖,然后在web依赖中exclusions里把tomcat的依赖加进去,这样就不会引用tomcat的依赖了。

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

4.SSL配置

SSL(Secure Sockets Layer,安全套接层 )是网络通信提供安全以及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。

在基于B/S的web应用中,是通过HTTPS实现SSL的。

(1)生成证书

使用SSL首先需要一个证书,这个证书既可以是自签名的,也可以从SSL证书中心获得。

在这里使用jdk自带的keytool工具生成证书

命令:keytool -genkey -alias tomcat -keyalg RSA -keystore ./.keystore

然后输入需要的信息

这样会在当前目录下生成一个.keystore文件,就是我们需要的证书文件

注意:-keyalg RSA 必须加上,这是密钥算法,不加上浏览器不认的

-keystore ./.keystore 指定证书文件位置以及证书文件名,不加会把证书文件生成在电脑用户目录里,比如:C:\Users\DELL

(2)Spring Boot配置SSL

将.keystore复制到项目的根目录

在application文件中配置SSL信息,跟生成的证书文件里的内容一致


server.port=8443
server.ssl.key-store=.keystore
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS
server.ssl.key-alias=tomcat

此时启动后可以看到启动日志:

Tomcat started on port(s): 8443 (https) with context path ''

(3)http转向https

书上是springboot1.5以下的配置,而我使用的是springboot2.0版本,有些代码有差异,具体见代码:

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

    // 这是spring boot 1.5.X以下版本的
    /*@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;
    }*/


访问8080端口会转到https端口,启动后可以看到:

Tomcat started on port(s): 8443 (https) 8080 (http) with context path ''

结果图:





猜你喜欢

转载自blog.csdn.net/qq_28056641/article/details/80875590