zoukankan      html  css  js  c++  java
  • SpringBoot

    转:https://www.hangge.com/blog/cache/detail_2457.html

    在 Spring boot 项目中,可以内置 Tomcat、Jetty、Undertow、Netty 等服务器容器。当我们添加了 spring-boot-starter-web 依赖后,默认会使用 Tomcat 作为 Web 容器。

        下面演示如何对这个 Tomcat 进行进一步的配置。
     

    1,常规配置

    (1)要对 Tomcat 进行进一步的配置,可以在 application.properties 中进行配置:
    原文:SpringBoot - 内置的Tomcat服务器配置详解(附:启用HTTPS服务)
    (2)下面我们修改一些常用的配置,内容如下:
    配置说明:
    • server.port:配置 Web 容器的端口号(默认为 8080)
    • server.error.path:配置当前项目出错时跳转去的页面。
    • server.servlet.session.timeout:配置 session 失效时间。30m 表示 30 分钟,如果不写单位则默认单位是秒。(注意:由于 Tomcat 中配置 session 过期时间是以分钟为单位,如果我们这里设置是秒的话,那么会自动转换为一个不超过所配置秒数的最大分钟数。比如配置了 119 秒,那么实际 session 过期时间是 1 分钟)
    • server.servlet.context-path:配置项目名称(默认为 /),如果配置了项目名称,那么在访问路径中要加上配置的路径
    • server.tomcat.uri-encoding:配置 Tomcat 请求编码
    • server.tomcat.max-threads:配置 Tomcat 的最大线程数
    • server.tomcat.basedir:配置 Tomcat 运行日志和临时文件的目录。若不配置,则默认使用系统的临时目录。
    server.port=8081
    server.error.path=/error
    server.servlet.session.timeout=30m
    server.servlet.context-path=/hangge
    server.tomcat.uri-encoding=utf-8
    server.tomcat.max-threads=500
    server.tomcat.basedir=/home/hangge/tmp

    (3)重启后,由于我们配置了 hangge 这个项目名称,因此需要通过如下地址访问 /hello 这个接口:

    原文:SpringBoot - 内置的Tomcat服务器配置详解(附:启用HTTPS服务)

    2,HTTPS 配置

        由于 HTTPS 具有良好的安全性,在开发中得到了越来越广泛的应用。不过一个 HTTPS 证书价格还是有点贵,好在国内一些服务器厂商也有提供免费的 HTTPS 证书。为方便演示,下面我直接使用 jdk 提供的的 Java 数字证书管理工具 keytool 来生成一个证书。


    (1)jdk 提供的数字证书管理工具 keytool 在 jdkin 目录下。我们在终端中执行如下命令自行生成一个数字证书:

    命令参数说明:
    • -genkey:表示要创建一个新的密钥
    • -alias:表示 keystore 的别名
    • -keyalg:表示使用的加密算法是 RSA(一种非对称加密算法)
    • -keysize:表示密钥的长度
    • -keystore:表示生成的密钥存放位置
    • -validity:表示密钥的有效时间(单位为天)
    keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore hangge.p12 -validity 365

    (2)上述命令执行过程中会要求输入密钥口令等信息,我们根据提示一步步输入即可。最终会在当前目录下生成一个 hangge.p12 的文件,我们将其复制到项目的根目录下。

    原文:SpringBoot - 内置的Tomcat服务器配置详解(附:启用HTTPS服务)
    (3)接着在项目 application.properties 中做如下配置:
    配置说明:
    • server.ssl.key-store:表示密钥文件名
    • server.ssl.key-alias:表示密钥别名
    • server.ssl.key-store-password:即前面创建证书过程中输入的密码
    server.ssl.key-store=hangge.p12
    server.ssl.key-alias=tomcathttps
    server.ssl.key-store-password=123456

    (4)配置完毕重启项目,这次我们通过 https 地址进行访问。由于证书是自己生成的,不被浏览器认可。

    原文:SpringBoot - 内置的Tomcat服务器配置详解(附:启用HTTPS服务)
    (5)我们点“高级”继续前进即可,最后运行结果如下:
    原文:SpringBoot - 内置的Tomcat服务器配置详解(附:启用HTTPS服务)

    3,将 HTTP 请求重定向为 HTTPS 请求

    (1)经过前面 HTTPS 配置以后,如果我们再用 HTTP 的方式访问接口,会发现访问失败。这是因为 Spring Boot 不支持同时在配置中启动 HTTP 和 HTTPS。
    原文:SpringBoot - 内置的Tomcat服务器配置详解(附:启用HTTPS服务)
    (2)我们可以在项目中创建一个配置类(TomcatConfig)来实现自动重定向:
    代码说明:我们首先配置一个 TomcatServletWebServerFactory,然后添加一个 Tomcat 中的 Connector(监听 80 端口),并将请求转发到 8080 上去。
    package com.example.demo;
     
    import org.apache.catalina.Context;
    import org.apache.catalina.connector.Connector;
    import org.apache.tomcat.util.descriptor.web.SecurityCollection;
    import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
    import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
     
    @Configuration
    public class TomcatConfig {
        @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(80);
            connector.setSecure(false);
            connector.setRedirectPort(8080);
            return connector;
        }
    }

    (3)配置完成后,我们在浏览器上输入 “http://localhost:80/hello” 就会自动重定向到“https://localhost:8080/hello”

  • 相关阅读:
    PHP 将二维数组中某列值作为数组的键名
    MySQL 8下忘密码后重置密码
    单一职责原则
    Linux下安装SVN服务端小白教程
    go 代码玩耍
    centos7 docker开启认证的远程端口2376配置教程
    Dockerfile RUN,CMD,ENTRYPOINT命令区别
    wait-for-it.sh脚本控制docker-compose启动顺序详解
    阿里云服务器漏洞修复_2020.5.22
    Let's Encrypt 免费通配符 SSL 证书申请教程
  • 原文地址:https://www.cnblogs.com/jvStarBlog/p/12717900.html
Copyright © 2011-2022 走看看