spring cloud/spring boot同時支持http和https訪問
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質(zhì)文章,第一時間送達
? 作者?|??涼瓜皮?
來源 |? urlify.cn/JnmYJv
前言
關(guān)于spring boot同時支持http和https訪問,在spring boot官網(wǎng)73.9已經(jīng)有說明文檔了,同樣在github上也有官網(wǎng)的例子。
在這里,我向大家講述一下,我是怎么實現(xiàn)的。
方式一
一、相關(guān)配置
server:
??port:?4000
https:
??port:?8443
??ssl:
????key-store:?classpath:sample.jks
????key-store-password:?secret
????key-password:?password
可以看到,只是簡簡單單添加端口的信息,sample.jks可以自己生成(記得對應(yīng)密碼),也可以在官網(wǎng)例子里面下載。
二、spring boot啟動文件讀取配置信息(注:請?zhí)砑颖匾膉ar)
@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);
????????}
????}
}
啟動項目后,可以看到兩個端口,說明已經(jīng)成功

方式二
一、相關(guān)配置
server:
??port:?8443
??ssl:
????key-store:?classpath:sample.jks
????key-store-password:?secret
????key-password:?password
http:
??port:?8080
二、spring boot啟動文件讀取配置信息(注:請?zhí)砑颖匾膉ar)
@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);
????}
}
啟動項目后,可以看到兩個端口,說明已經(jīng)成功
?
總結(jié)
對比兩種方法可以看出方式二比方式一簡單一點,主要是因為方式二用的代碼比較少,我也不知道這兩種方式有什么區(qū)別,我自己測試過,無論是spring boot還是spring cloud,這兩個方式都沒問題,就算是方式二,同樣可以幫服務(wù)注冊到eureka上。不一樣的是方式一注冊到eureka的端口是4000,方式二注冊到eureka的端口是8443。作為一個強迫的人士,在我自己的項目上,用的方式二,因為我的eureka用的http注冊服務(wù)。如果你只是spring boot,當然選擇少一點代碼的方式二啦。
這只是我在做項目時,遇到的需求,拉出來給大家分享,如果發(fā)現(xiàn)問題,請大家提一下意見,讓我完善一下,謝謝
粉絲福利:108本java從入門到大神精選電子書領(lǐng)取
???
?長按上方鋒哥微信二維碼?2 秒 備注「1234」即可獲取資料以及 可以進入java1234官方微信群
感謝點贊支持下哈?
