javascript
基于SpringBoot项目的https
基于SpringBoot項(xiàng)目的https
在spring中配置項(xiàng)目運(yùn)行的端口很簡(jiǎn)單。
在application.properties中
server.port: 8080這樣配置后,spring boot內(nèi)嵌的tomcat服務(wù)器就是跑在8080端口啟動(dòng)http服務(wù)。但是如果在配置中啟動(dòng)https服務(wù),用到的端口也是server.port。spring 不支持同時(shí)在配置中啟動(dòng)http和https。
但是如果這樣配置,項(xiàng)目只能走h(yuǎn)ttp協(xié)議。如果想讓項(xiàng)目支持https協(xié)議,可以有兩種方法。
一:在配置中配置https的配置信息,http采用硬編碼的方式
二:用硬編碼的方式來(lái)寫(xiě)https
用硬編碼的方式寫(xiě)https有點(diǎn)麻煩,所以一般都采用第一種方式。
無(wú)論用哪種方式,想支持https,一定要生成一對(duì)秘鑰。用openssl生成證書(shū):
生成過(guò)程中,需要?jiǎng)?chuàng)建訪問(wèn)密碼,請(qǐng)記錄下來(lái)。 keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12 //生成服務(wù)端的keystore(.jks文件, 非必要,Java程序通常使用該格式的證書(shū)) 生成過(guò)程中,需要?jiǎng)?chuàng)建訪問(wèn)密碼,請(qǐng)記錄下來(lái)。 把ca證書(shū)放到keystore中(非必要)
keytool -importcert -keystore server.jks -file ca.crt
生成證書(shū)后,讓瀏覽器信任跟證書(shū)(ca.crt)。
打開(kāi)瀏覽器的設(shè)置。找到設(shè)置信任證書(shū)的部分。導(dǎo)入證書(shū)。
準(zhǔn)備工作完畢,看一下代碼
application.properties
fzk.port:8091 fzk.port:8091是自定義的名。因?yàn)椴豢赡芡瑫r(shí)出現(xiàn)兩個(gè)server.port
同時(shí)支持http還需要一個(gè)java類
HttpsConfiguration.java (名字自己隨便起)
@Configuration是spring的注解,表示這是一個(gè)配置。@Value("${fzk.port}")找到配置文件中的fzk.port賦值給int類型的port。還可以寫(xiě)成下面這樣:
@Configuration(prefix = "fzk") public class HttpsConfiguration {private int port;public void setPort(int port){this.port = port;}public int getPort(){return port;} }此時(shí)類中的屬性名和配置文件中的名一定要對(duì)應(yīng)上。
這樣就可以讓項(xiàng)目同時(shí)支持http和https了。
上面說(shuō)了還有另外一種方法,采用硬編碼https的請(qǐng)求的方式。
配置文件中可以不用寫(xiě)服務(wù)端口號(hào),直接看java類
@Configuration public class HttpsConfiguration {@Beanpublic EmbeddedServletContainerCustomizer containerCustomizer() {return new EmbeddedServletContainerCustomizer() {@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {Ssl ssl = new Ssl();// Server.jks中包含服務(wù)器私鑰和證書(shū)ssl.setKeyStore("/home/fzk/key/server.jks");ssl.setKeyStorePassword("123456");container.setSsl(ssl);container.setPort(8092);}};}@Beanpublic EmbeddedServletContainerFactory servletContainerFactory() {TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection = new SecurityCollection();collection.addPattern("/*");securityConstraint.addCollection(collection);context.addConstraint(securityConstraint);}};factory.addAdditionalTomcatConnectors(createHttpConnector());return factory;}private Connector createHttpConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setSecure(false);connector.setPort(8093);connector.setRedirectPort(8092);return connector;}}
第一個(gè)bean的部分是使端口8092的https可以訪問(wèn)。下面的部分是讓端口8093的http重定向到8092。
轉(zhuǎn)載于:https://www.cnblogs.com/hejunnuo/p/10323688.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的基于SpringBoot项目的https的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Echarts富文本rich及格式化工具
- 下一篇: 如何让css与js分离