专栏首页Linyb极客之路spring cloud/spring boot同时支持http和https访问

spring cloud/spring boot同时支持http和https访问

前言

       关于spring boot同时支持http和https访问,在spring boot官网73.9已经有说明文档了,同样在github上也有官网的例子。官网链接如下

https://github.com/spring-projects/spring-boot/tree/v1.5.9.RELEASE/spring-boot-samples/spring-boot-sample-tomcat-multi-connectors

  在这里,我向大家讲述一下,我是怎么实现的。

方式一

    一、相关配置

server:
  port: 4000


https:
  port: 8443
  ssl:
    key-store: classpath:sample.jks
    key-store-password: secret
    key-password: password

   可以看到,只是简简单单添加端口的信息,sample.jks可以自己生成(记得对应密码),也可以在官网例子里面下载。

https://raw.githubusercontent.com/spring-projects/spring-boot/v1.5.9.RELEASE/spring-boot-samples/spring-boot-sample-tomcat-multi-connectors/src/main/resources/sample.jks

二、spring boot启动文件读取配置信息(注:请添加必要的jar)

@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(GatewayApplication.class, args);
    }

    @Value("${https.port}")
    private Integer port;

    @Value("${https.ssl.key-store-password}")
    private String key_store_password;

    @Value("${https.ssl.key-password}")
    private String key_password;
  
  /* --------------------请按照自己spring boot版本选择 start--------------------- */

  // 这是spring boot 1.5.X以下版本的 添加了这个,下一个就不用添加了
    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.addAdditionalTomcatConnectors(createSslConnector()); // 添加http
        return tomcat;
    }
  
  // 这是spring boot 2.0.X版本的 添加这个,上一个就不用添加了
  @Bean
  public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
    tomcat.addAdditionalTomcatConnectors(createSslConnector()); // 添加http
    return tomcat;
  }

  /* -------------------请按照自己spring boot版本选择 end---------------------- */


  // 配置https
    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        try {
            File keystore = new ClassPathResource("sample.jks").getFile();
            /*File truststore = new ClassPathResource("sample.jks").getFile();*/
            connector.setScheme("https");
            connector.setSecure(true);
            connector.setPort(port);
            protocol.setSSLEnabled(true);
            protocol.setKeystoreFile(keystore.getAbsolutePath());
            protocol.setKeystorePass(key_store_password);
            protocol.setKeyPass(key_password);
            return connector;
        }
        catch (IOException ex) {
            throw new IllegalStateException("can't access keystore: [" + "keystore"
                    + "] or truststore: [" + "keystore" + "]", ex);
        }
    }
}

启动项目后,可以看到两个端口,说明已经成功

方式二

 一、相关配置

server:
  port: 8443
  ssl:
    key-store: classpath:sample.jks
    key-store-password: secret
    key-password: password

http:
  port: 8080

 二、spring boot启动文件读取配置信息(注:请添加必要的jar)

@SpringBootApplication
public class SampleTomcatTwoConnectorsApplication {

    @Value("${http.port}")
    private Integer port;


  /* --------------------请按照自己spring boot版本选择 start--------------------- */
  
  // 这是spring boot 1.5.X以下版本的 添加了这个,下一个就不用添加了
    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 添加http
        return tomcat;
    }
  
  // 这是spring boot 2.0.X版本的 添加这个,上一个就不用添加了
  @Bean
  public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
    tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 添加http
    return tomcat;
  }


/* --------------------请按照自己spring boot版本选择 end--------------------- */


  // 配置http
    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(port);
        return connector;
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleTomcatTwoConnectorsApplication.class, args);
    }

}

启动项目后,可以看到两个端口,说明已经成功

总结

 对比两种方法可以看出方式二比方式一简单一点,主要是因为方式二用的代码比较少,我也不知道这两种方式有什么区别,我自己测试过,无论是spring boot还是spring cloud,这两个方式都没问题,就算是方式二,同样可以帮服务注册到eureka上。不一样的是方式一注册到eureka的端口是4000,方式二注册到eureka的端口是8443。作为一个强迫的人士,在我自己的项目上,用的方式二,因为我的eureka用的http注册服务。如果你只是spring boot,当然选择少一点代码的方式二啦。

本文分享自微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot自定义Starter

    3) 输入GroupId、ArtifactId 和 Version 信息,点击Finish

    lyb-geek
  • SpringBoot一些很实用的功能

    然后这个图案是可以自定义的,在src/main/resource下新建一个banner.txt文件,然后去http://patorjk.com/software...

    lyb-geek
  • 你需要了解springboot的一些基本理论

    用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml 文件创建独立的spring引用程序 main方法运行嵌入...

    lyb-geek
  • Spring boot应用踩坑集锦

    spring boot是spring的一种开发套件,是spring cloud的基础框架,要学习spring cloud微服务是绕不开的,遇到一些踩坑问题在这里...

    用户1141560
  • kotlin web开发教程【一】从零搭建kotlin与spring boot开发环境

    IDEA中文输入法的智能提示框不会跟随光标的问题 我用的开发工具是IDEA image.png 这个版本的IDEA有一个问题; 就是中文输入法的智能提示框不...

    liulun
  • Mac chrome浏览器 微信支付商户安全控件无法启用

    1、安装完控件后,浏览器输入:chrome://flags/#enable-nacl,将Native Client设置为:Enabled 2、在shift+c...

    lilugirl
  • SpringBoot里slf4j日志功能的默认实现

    本文是这篇教程的学习笔记: https://www.springboottutorial.com/logging-with-spring-boot-logba...

    Jerry Wang
  • Python基础部分大总结

    首先要跟所有的读者来一句道歉。昨天匆忙发出的文章发现基础部分整合的链接不能访问,后来一想应该是没有发布,所以就点击不了链接,没关系,我重新整合一下,小伙伴有两个...

    叫我龙总
  • python技巧分享(六)

    songleo
  • 热度碾压 Java、C#、C++的 Python,为什么速度那么慢?

    眼下 Python 异常火爆,不论是 DevOps、数据科学、Web 开发还是安全领域,都在用 Python——但是它在速度上却没有任何优势。

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券