当前位置:   article > 正文

Springboot同时支持http和https访问

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

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

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

如我

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

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

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

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

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

  1. server.ssl.key-store=classpath:keystore.jks
  2. 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配置类
  1. /**
  2. *
  3. * @function http访问配置类
  4. *
  5. */
  6. @Configuration
  7. public class TomcatConfig {
  8. @Value("${http.port}")
  9. private int httpPort;
  10. @Bean
  11. public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() {
  12. return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {
  13. @Override
  14. public void customize(ConfigurableWebServerFactory factory) {
  15. if (factory instanceof TomcatServletWebServerFactory) {
  16. TomcatServletWebServerFactory webServerFactory = (TomcatServletWebServerFactory)factory;
  17. Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
  18. // 设置http访问的端口号,不能与https端口重复,否则会报端口被占用的错误
  19. connector.setPort(httpPort);
  20. webServerFactory.addAdditionalTomcatConnectors(connector);
  21. }
  22. }
  23. };
  24. }
  25. }

之后就可以使用这个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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/847935
推荐阅读
相关标签
  

闽ICP备14008679号