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

java1234

共 4501字,需浏览 10分钟

 ·

2020-09-30 12:14


点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

  作者 |  凉瓜皮 

来源 |  urlify.cn/JnmYJv

66套java从入门到精通实战课程分享

前言

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

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

方式一

 一、相关配置

server:
  port: 4000


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

可以看到,只是简简单单添加端口的信息,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,当然选择少一点代码的方式二啦。

  这只是我在做项目时,遇到的需求,拉出来给大家分享,如果发现问题,请大家提一下意见,让我完善一下,谢谢




粉丝福利:108本java从入门到大神精选电子书领取

???

?长按上方锋哥微信二维码 2 秒
备注「1234」即可获取资料以及
可以进入java1234官方微信群



感谢点赞支持下哈 

浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报