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

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

关于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,当然选择少一点代码的方式二啦。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值