zoukankan      html  css  js  c++  java
  • Spring Boot 如何同时支持 http 与 https 访问?

    原文链接:Spring Boot 如何同时支持 http 与 https 访问?


    大多数项目要么要求 https 协议来访问要么直接用 http 协议,但有些项目就是这么奇怪要求同时支持两种协议。

    此示例中使用Spring Boot 内置的 tomcat 服务器,我拿到的 SSL 证书是 crt 类型的。所有首先需要将证书转成 jks 类型的。

    crt 转 jks

      # 转p12
      openssl pkcs12 -export -out keystore.pkcs12 -inkey nexus.key -in nexus.crt
    	
      # 这里需要设置密码
      # 再将p12格式文件转为.jks格式:
      keytool -v -importkeystore -srckeystore keystore.pkcs12 -srcstoretype PKCS12 -destkeystore 
      keystore.jks -deststoretype JKS
      # 输入上步设置的密码并设置新密码 可以和上一步一样的密码

    Windows 系统需要安装 openssl 后才可以执行上述命令。

    安装

    将生成的 jks 文件放到项目的 resource 目录下,开始配置 application.yml 文件。

    server:
      port: 8888
      custom:
        # http 端口
        httpPort: 9999
      ssl:
        key-store: classpath:keystore.jks
        key-password: 123456
        key-store-type: JKS
      tomcat:
        uri-encoding: utf-8
        basedir: tmp
      #
      servlet:
        context-path: /
    

    然后编写 Https配置类:HttpConfig.java

    import org.apache.catalina.connector.Connector;
    import org.springframework.beans.factory.annotation.Value;
    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;
    
    /**
     * @Author: ChangXuan
     * @Decription: 配置同时支持 HTTP 与 HTTPS 访问
     * @Date: 19:39 2020/2/20
     **/
    @Configuration
    public class HttpsConfig {
        @Value("${server.custom.httpPort}")
        private Integer httpPort;
    
        @Bean
        public ServletWebServerFactory serverFactory() {
            TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
            tomcat.addAdditionalTomcatConnectors(createStandardConnector());
            return tomcat;
        }
        /**
         * 配置http
         * @return
         */
        private Connector createStandardConnector() {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setPort(httpPort);
            return connector;
        }
    }

    注意事项

    application.yml 中配置的 jks 文件的目录为 classpath ,classpath 指的是 target/classes 目录。所以运行时如果报错“找不到 jks 文件”,就手动将 jks 文件复制到此目录下一份。

  • 相关阅读:
    什么是95%的置信区间?
    机器学习博客
    深度自动编码器
    深度神经网络中的权重初始化方法
    自编码器和去噪自编码器的可视化
    08 scrapy框架
    redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float first.
    Redis 教程
    selenium 滑动解锁(drag_and_drop_by_offset)
    获取登陆cookie,并且利用cookie访问登陆后的界面
  • 原文地址:https://www.cnblogs.com/chxuan/p/12390476.html
Copyright © 2011-2022 走看看