<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          spring cloud/spring boot同時(shí)支持http和https訪問

          共 4501字,需瀏覽 10分鐘

           ·

          2020-09-30 12:14


          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|??涼瓜皮?

          來源 |? urlify.cn/JnmYJv

          66套java從入門到精通實(shí)戰(zhàn)課程分享

          前言

            關(guān)于spring boot同時(shí)支持http和https訪問,在spring boot官網(wǎng)73.9已經(jīng)有說明文檔了,同樣在github上也有官網(wǎng)的例子。

            在這里,我向大家講述一下,我是怎么實(shí)現(xiàn)的。

          方式一

           一、相關(guān)配置

          server:
          ??port:?4000


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

          可以看到,只是簡(jiǎn)簡(jiǎn)單單添加端口的信息,sample.jks可以自己生成(記得對(duì)應(yīng)密碼),也可以在官網(wǎng)例子里面下載。

           二、spring boot啟動(dòng)文件讀取配置信息(注:請(qǐng)?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;????/*?--------------------請(qǐng)按照自己spring?boot版本選擇?start---------------------?*/??//?這是spring?boot?1.5.X以下版本的?添加了這個(gè),下一個(gè)就不用添加了
          ????@Bean
          ????public?EmbeddedServletContainerFactory?servletContainer()?{
          ????????TomcatEmbeddedServletContainerFactory?tomcat?=?new?TomcatEmbeddedServletContainerFactory();
          ????????tomcat.addAdditionalTomcatConnectors(createSslConnector());?//?添加http
          ????????return?tomcat;
          ????}????//?這是spring?boot?2.0.X版本的?添加這個(gè),上一個(gè)就不用添加了??@Bean??public?ServletWebServerFactory?servletContainer()?{????TomcatServletWebServerFactory?tomcat?=?new?TomcatServletWebServerFactory();????tomcat.addAdditionalTomcatConnectors(createSslConnector());?//?添加http????return?tomcat;??}??/*?-------------------請(qǐng)按照自己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);
          ????????}
          ????}
          }

          啟動(dòng)項(xiàng)目后,可以看到兩個(gè)端口,說明已經(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啟動(dòng)文件讀取配置信息(注:請(qǐng)?zhí)砑颖匾膉ar)

          @SpringBootApplication
          public?class?SampleTomcatTwoConnectorsApplication?{

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

          ??/*?--------------------請(qǐng)按照自己spring?boot版本選擇?start---------------------?*/
          ????//?這是spring?boot?1.5.X以下版本的?添加了這個(gè),下一個(gè)就不用添加了
          ????@Bean
          ????public?EmbeddedServletContainerFactory?servletContainer()?{
          ????????TomcatEmbeddedServletContainerFactory?tomcat?=?new?TomcatEmbeddedServletContainerFactory();
          ????????tomcat.addAdditionalTomcatConnectors(createStandardConnector());?//?添加http
          ????????return?tomcat;
          ????}????//?這是spring?boot?2.0.X版本的?添加這個(gè),上一個(gè)就不用添加了??@Bean??public?ServletWebServerFactory?servletContainer()?{????TomcatServletWebServerFactory?tomcat?=?new?TomcatServletWebServerFactory();????tomcat.addAdditionalTomcatConnectors(createStandardConnector());?//?添加http????return?tomcat;??}
          /*?--------------------請(qǐng)按照自己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);
          ????}

          }

          啟動(dòng)項(xiàng)目后,可以看到兩個(gè)端口,說明已經(jīng)成功

          ?

          總結(jié)

            對(duì)比兩種方法可以看出方式二比方式一簡(jiǎn)單一點(diǎn),主要是因?yàn)榉绞蕉玫拇a比較少,我也不知道這兩種方式有什么區(qū)別,我自己測(cè)試過,無論是spring boot還是spring cloud,這兩個(gè)方式都沒問題,就算是方式二,同樣可以幫服務(wù)注冊(cè)到eureka上。不一樣的是方式一注冊(cè)到eureka的端口是4000,方式二注冊(cè)到eureka的端口是8443。作為一個(gè)強(qiáng)迫的人士,在我自己的項(xiàng)目上,用的方式二,因?yàn)槲业膃ureka用的http注冊(cè)服務(wù)。如果你只是spring boot,當(dāng)然選擇少一點(diǎn)代碼的方式二啦。

            這只是我在做項(xiàng)目時(shí),遇到的需求,拉出來給大家分享,如果發(fā)現(xiàn)問題,請(qǐng)大家提一下意見,讓我完善一下,謝謝




          粉絲福利:108本java從入門到大神精選電子書領(lǐng)取

          ???

          ?長(zhǎng)按上方鋒哥微信二維碼?2 秒
          備注「1234」即可獲取資料以及
          可以進(jìn)入java1234官方微信群



          感謝點(diǎn)贊支持下哈?

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  熟女视频网 | 日本黄免费观看 | 欧美理论片在线观看 | 国产乱伦高清 | 成人黄色电影在线 |