spring cloudspring boot同时支持http和https访问

spring cloudspring boot同时支持http和https访问
spring cloudspring boot同时支持http和https访问

spring cloudspring 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(createSslConnec tor()); // 添加http

return tomcat;

}

// 这是spring boot 2.0.X版本的添加这个,上一个就不用添加了

@Bean

public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new

TomcatServletWebServerFactory();

tomcat.addAdditionalTomcatConnectors(createSslConnec tor()); // 添加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(createStandardC onnector()); // 添加http

return tomcat;

}

// 这是spring boot 2.0.X版本的添加这个,上一个就不用添加了

@Bean

public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();

tomcat.addAdditionalTomcatConnectors(createStandardC onnector()); // 添加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(SampleTomcatTwoConnectorsAppli cation.class, args);

}

}

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

总结

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

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

相关主题
相关文档
最新文档