Springboot同时支持http和https访问

springboot默认是http的

一、支持https访问

需要生成证书,并配置到项目中。

1、证书

如果公司提供,则直接使用公司提供的证书;

如果公司没有提供,也可自己使用Java自带的命令keytool来生成:

(1)执行cmd命令

windows下cmd打开命令黑窗口,输入以下命令(直接复制即可)

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

有些参数是可以自定义的:

复制代码
1. -storetype 指定密钥仓库类型 
2. -keyalg 生证书的算法名称,RSA是一种非对称加密算法 
3. -keysize 证书大小 
4. -keystore 生成的证书文件的存储路径 
5. -validity 证书的有效期
(2)按照提示输入信息

输入keytool命令后回车会弹框提示输入password、first name、last name、地址等信息。

(3)最后会自动生成一个文件

如我

把这个文件复制出来放到:

  • 可以放在项目的根目录下,即和pom文件同级的目录
  • 也可放置在src/main/resources目录下

我选择了放在src/main/resources下。

2、在配置文件中配置支持https所需信息
复制代码
# 支持https访问
# https访问的端口号
server.port=8443
# 证书的路径,根据证书放置位置不同,写法不同
# 如果证书放在根目录下,此处只需要写证书的名字即可,但项目打包部署时提示证书找不到,故建议放在resources文件夹下
# 如果证书放在 src/main/resources 下,则需写 classpath:keystore/server.keystore
server.ssl.key-store=classpath:keystore/server.keystore
# 证书的签名密码,如果是自己生成的证书在输入信息时会有输入
server.ssl.key-store-password=******
# 证书类型,常见的两种证书类型有:PKCS12和JKS,这里需要注意证书类型不能写错了,否则项目启动时会报错
server.ssl.keyStoreType=JKS

如我在项目的application.properties中配置

复制代码
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=wtyy

重启项目,即可使用https://localhost:{port}/xxx访问了。

二、同时支持https和http

上述配置了https后,使用http访问会报错,如果需要同时支持https和http访问,

因一个项目只能配置一个 server.port,所以要支持http访问需要用Java代码实现。

1、添加http端口配置

如我在配置文件新增

复制代码
http.port=9999
2、编写java配置类
复制代码
/**
 * 
 * @function   http访问配置类
 *
 */
@Configuration
public class TomcatConfig {
    
    @Value("${http.port}")
    private int httpPort;

    @Bean
    public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() {
        return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {

            @Override
            public void customize(ConfigurableWebServerFactory factory) {
                if (factory instanceof TomcatServletWebServerFactory) {
                    TomcatServletWebServerFactory webServerFactory = (TomcatServletWebServerFactory)factory;
                    Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
                    // 设置http访问的端口号,不能与https端口重复,否则会报端口被占用的错误
                    connector.setPort(httpPort);
                    webServerFactory.addAdditionalTomcatConnectors(connector);
                }
            }
        };
    }
      
}

之后就可以使用这个9999端口号进行http访问了。

参考 spring-boot/spring-boot-samples/spring-boot-sample-tomcat-multi-connectors/src/main/java/sample/tomcat/multiconnector/SampleTomcatTwoConnectorsApplication.java at v2.0.0.RELEASE · spring-projects/spring-boot · GitHub

相关推荐
vx-程序开发14 小时前
springboot农产品运输服务平台---附源码75498
java·javascript·spring boot·python·eclipse·django·php
攻城有术14 小时前
专项攻克——spring、springMVC、springBoot、springCloud的启动流程
spring boot·spring·spring cloud
独行侠影a15 小时前
SpringBoot 分布式锁实战:Redisson 解决订单超卖并发问题
spring boot·分布式·后端
markinmarkin17 小时前
Spring 中有哪些方式可以把Bean 注入到IOC 容器?
java·spring
敲个大西瓜18 小时前
Springboot核心面试题
java·spring boot·后端
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ19 小时前
Spring‑AI Document 对象 JSON 字段详解
人工智能·spring·json
麻雀聊技术19 小时前
一重启 AI 就失忆?用 Spring AI + PostgreSQL 3步搞定“长期记忆”持久化(附完整代码)
java·spring·openai
码农进化录19 小时前
Java 程序员的 AI 进化论 | LangChain4j 入门,Java 开发者的 AI 应用框架
java·spring boot·openai
he___H20 小时前
Spring-Configur注解
java·spring
铃木之影21 小时前
Java 版本 RAG 示例(Spring AI + Milvus)
java·人工智能·spring