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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值