配置springBoot内置Tomcat端口实现http/https同时访问

今天要和大家聊的是在 Spring Boot 项目中,如何开启 https 配置,为我们的接口保驾护航。
需要一个证书,可以自己生成或者购买
1、自己生成
利用终端工具生产证书的命令
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore /Users/mac/Desktop/cloudFile/sslhttps.p12 -validity 365
在这里插入图片描述
将上面生成的 sslhttps.p12 拷贝到 Spring Boot 项目的 resources 目录下。然后在 application.yml 中添加如下配置:

server:
  port: 8443
  ssl:
    key-store: classpath:sslhttps.p12
    key-alias: tomcathttps
    key-store-password: 123456

其中:

key-store表示密钥文件名。

key-alias表示密钥别名。

key-store-password就是在cmd命令执行过程中输入的密码。

请求转发
考虑到 Spring Boot 不支持同时启动 HTTP 和 HTTPS ,为了解决这个问题,我们这里可以配置一个请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上。

具体配置如下:

package com.austin.springboothttps.config;

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName TomcatConfig
 * @Author liuqh
 * @Date 2019-08-24 17:30
 * @Description
 */
@Configuration
public class TomcatConfig {

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        // 添加http
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());
        return tomcat;
    }

    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //不想域名加端口访问,这里就配置http默认端口80
        connector.setPort(8081);
        return connector;
    }
}

2、云服务提供商那里申请一个免费的证书
在这里插入图片描述
将tomcat下面的证书拷贝到 Spring Boot 项目的 resources 目录下。然后在 application.yml 中添加如下配置:

server:
  port: 8443 #不想域名加端口访问,这里就配置https默认端口443
  ssl:
    key-store: classpath:xxx.jks
    key-store-password: xxx
    key-store-type: JKS

请求转发
考虑到 Spring Boot 不支持同时启动 HTTP 和 HTTPS ,为了解决这个问题,我们这里可以配置一个请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上。

具体配置如下:

package com.austin.springboothttps.config;

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName TomcatConfig
 * @Author liuqh
 * @Date 2019-08-24 17:30
 * @Description
 */
@Configuration
public class TomcatConfig {

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        // 添加http
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());
        return tomcat;
    }

    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //不想域名加端口访问,这里就配置http默认端口80
        connector.setPort(8081);
        return connector;
    }
}

启动项目成功
在这里插入图片描述
参考:
https://mp.weixin.qq.com/s/WOmOXN_IK0IMjL0_hlAOFA
https://blog.csdn.net/qq_24894159/article/details/79936212
https://www.cnblogs.com/lianggp/p/8136540.html

扫描二维码关注公众号,回复: 9326375 查看本文章
发布了12 篇原创文章 · 获赞 0 · 访问量 2646

猜你喜欢

转载自blog.csdn.net/LiuAustin/article/details/100060626
今日推荐