SpringBoot - 内置 Web 容器配置

Spring Boot 项目中,可以内置 TomcatJettyUndertowNetty等容器。

一、Tomcat 配置

当开发者添加了spring-boot-starter-web 依赖之后,默认会使用 Tomcat 作为 Web 容器。

1、常规配置

(1)要对 Tomcat 进行进一步的配置,可以在 application.properties 或者 application.yaml 中进行配置,

(2)下面我们以 application.properties 为例 添加入配置:

server.port=8081
server.servlet.context-path=/yby
server.error.path=/error
server.servlet.session.timeout=30m
server.tomcat.uri-encoding=UTF-8
server.tomcat.threads.max=400
server.tomcat.basedir=/home/yby/web

配置参数说明:

• server.port 配置了Web容器的端口号,默认为 8080

• error.path 配置了当项目出错时跳转去的页面。

• session.timeout 配置了session失效时间,30m表示30分钟,如果不写单位,默认单位是秒。由于Tomcat中配置session过期时间以分钟为单位,因此这里单位如果是秒的话,该时间会被转换为一个不超过所配置秒数的最大分钟数,例如这里配置了119,默认单位为秒,则实际session过期时间为1分钟。

• context-path表示项目名称,不配置时默认为/。如果配置了,就要在访问路径中加上配置的路径。

• uri-encoding表示配置Tomcat请求编码。

• max-threads表示Tomcat最大线程数。

• basedir是一个存放Tomcat运行日志和临时文件的目录,若不配置,则默认使用系统的临时目录。

当然,Web容器相关的配置不止这些,这里只列出了一些常用的配置,完整的配置可以参考官方文档 Appendix A. Commonapplication properties 一节。

(3) 重新启动项目,因为 我们配置了 端口号为 8081 我们访问的时候需要把端口改为 8081,如下所示:

 二、Jetty配置

(1)、添加 Jetty 的依赖,

 主要在 pom.xml 文件中 把 spring-boot-starter-web 中除去默认的 Tomcat,然后加入 Jetty 的依赖即可。

配置方式如下:

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!-- 移除默认内置的Tomcat服务器 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 添加 jetty 服务器的依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

(2)、重启项目,查看日志输出

 从日志输出中我们看到是以 Jetty 服务启动的。

三、Undertow配置

Undertow 是一个红帽公司开源的Java服务器,具有非常好的性能,在 Spring Boot 中也得到了很好的支持,配置方式与Jetty类似。

(1)、添加修改配置。

把原来 jetty 配置改为 undertow 的依赖即可。配置如下所示:

        <!-- 添加 undertow 服务器的依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

(2)、重启项目,查看日志输出。

  从日志输出中我们看到是以 Undertow 服务启动的。

四、HTTPS 配置

由于HTTPS具有良好的安全性,在开发中得到了越来越广泛的应用,像微信公众号、小程序等的开发都要使用HTTPS来完成。对于个人开发者而言,一个HTTPS证书的价格还是有点贵,国内有一些云服务器厂商提供免费的HTTPS证书,一个账号可以申请数个。不过在jdk中提供了一个Java数字证书管理工具keytool,在\jdk\bin目录下,通过这个工具可以自己生成一个数字证书。下面为了方便演示,我们就以 JDK 自带 keytool 工具生成证书。

(1)、使用 keytool 生成证书

keytool -genkey -alias httpstest -keyalg RSA -keysize 2048 -keystore test1.p12 -validity 365

 参数说明:

  • -genkey:表示要创建一个新的密钥
  • -alias:表示 keystore 的别名
  • -keyalg:表示使用的加密算法是 RSA(一种非对称加密算法)
  • -keysize:表示密钥的长度
  • -keystore:表示生成的密钥存放位置
  • -validity:表示密钥的有效时间(单位为天)

(2)、拷贝文件

cmd窗口中直接执行如上命令,在执行的过程中需要输入密钥口令等信息,根据提示输入即可。命令执行完成后,会在当前用户目录下生成一个名为test.p12的文件。然后把 此文件拷贝到 项目的根目录下。如下所示:

 (3)、添加配置

拷贝完文件后,在 项目的 application.properties 文件中添加如下配置:

# 密钥文件名
server.ssl.key-store=test1.p12
# 密钥别名
server.ssl.key-alias=httpstest
# 在生成密钥时在 cmd 命令中输入的密钥口令
server.ssl.key-store-password=123456

(4)、配置完成后,重启项目 通过 https 访问。

由于证书不被浏览器认可,会出现如上图所示的提示。点击高级继续前往,成功访问。

(5)、将HTTP请求重定向为HTTPS请求。

因为Spring Boot不支持同时在配置中启动HTTPHTTPS。这个时候如果在通过 HTTP 访问就会出现如下错误:

配置重定向

我们首先配置一个 TomcatServletWebServerFactory,然后添加一个 Tomcat 中的 Connector(监听 8080 端口),并将请求转发到 8081 上去。

代码如下所示:


@Configuration
public class Http2HttpsConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }
    private Connector createTomcatConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080);
        connector.setSecure(false);
        connector.setRedirectPort(8081);
        return connector;
    }
}

重新启动服务,在浏览器中输入 http://localhost:8080/yby/hello 将会从定向到  https://localhost:8081/yby/hello 上去。

猜你喜欢

转载自blog.csdn.net/small_love/article/details/111674212
今日推荐