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

相关推荐
鱼鳞_32 分钟前
苍穹外卖-Day12(数据统计)
java·spring boot
phltxy34 分钟前
Spring AI Alibaba 多模态应用开发实践
java·人工智能·spring
心之伊始1 小时前
Java 后端 AI 应用网关实战:多模型路由、Fallback、超时和可观测性设计
java·spring boot·大模型·架构设计·ai网关
RuoyiOffice2 小时前
2026 企业定制开发选型:从零开发、低代码、SaaS 与 RuoYi Office 怎么选?
spring boot·uni-app·开源·saas·oa·定制化·ruoyioffice
可乐ea2 小时前
【知识获取与分享社区项目 | 项目日记第 24 天】终章总结:从认证、发布、计数、Feed、搜索到 RAG:完整复盘一个知识社区后端系统
java·spring boot·redis·mysql·elasticsearch·ai·kafka
Jabes.yang2 小时前
Java面试实录:AIGC场景下的Stream、微服务、Redis、Kafka与安全实战
java·spring boot·redis·微服务·面试·kafka·aigc
西凉的悲伤3 小时前
Spring Security + JWT 登录认证完整实践指南
java·后端·spring·spring security·jwt
cheems95273 小时前
[开发日记]Spring Boot + MyBatis-Plus 抽奖系统开发复盘:从奖品创建、活动校验到前端圈选人员失效的一次完整排障
前端·spring boot·mybatis
砍材农夫3 小时前
物联网实战:Spring Boot MQTT | 客户端框架比对
spring boot·后端·物联网
>no problem<12 小时前
基于cola5.0的基础设施层的多数据库切换方案思路
数据库·spring boot·mybatisplus·cola5.0·数据库迁移适配