最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot實現(xiàn)Undertow服務(wù)器同時支持HTTP2、HTTPS的方法

 更新時間:2018年12月19日 11:34:31   作者:養(yǎng)碼場007  
這篇文章考慮如何讓Spring Boot應(yīng)用程序同時支持HTTP和HTTPS兩種協(xié)議。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

如今,企業(yè)級應(yīng)用程序的高性能安全加密的常見場景是同時支持HTTP和HTTPS兩種協(xié)議,這篇文章考慮如何讓Spring Boot應(yīng)用程序同時支持HTTP和HTTPS兩種協(xié)議。Spring Boot的web容器已經(jīng)有容器可以支持HTTP2了,這個例子中選擇了Undertow高性能服務(wù)器作為Spring Boot的web容器。

What-什么是HTTP2

HTTP2是HTTP協(xié)議自1999年HTTP1.1發(fā)布后的首個更新,主要基于SPDY協(xié)議。由互聯(lián)網(wǎng)工程任務(wù)組(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小組進(jìn)行開發(fā)。該組織于2014年12月將HTTP/2標(biāo)準(zhǔn)提議遞交至IESG進(jìn)行討論,于2015年2月17日被批準(zhǔn)。HTTP2標(biāo)準(zhǔn)于2015年5月以RFC7540正式發(fā)表。

Why-為什么要用HTTP2

HTTP2是第二代的HTTP協(xié)議,關(guān)于HTTP2的優(yōu)點這里就不闡述了,可以參考下面鏈接文章了解:http://ju.outofmemory.cn/entr...。

下圖是Akamai 公司建立的一個官方的演示,主要用來說明在性能上HTTP/1.1和HTTP/2在性能升的差別。同時請求 379 張圖片,HTTP/1.1加載用時4.54s,HTTP/2加載用時1.47s,大家可以通過 https://http2.akamai.com/demo 來感受下HTTP2的提速。

What-什么是HTTPS

要說HTTPS我們得先說SSL(Secure Sockets Layer,安全套接層),這是一種為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,SSL在網(wǎng)絡(luò)傳輸層對網(wǎng)絡(luò)連接進(jìn)行加密。SSL協(xié)議可以分為兩層:SSL記錄協(xié)議(SSL Record Protocol),它建立在可靠的傳輸協(xié)議如TCP之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能支持;SSL握手協(xié)議(SSL Handshake Protocol),它建立在SSL記錄協(xié)議之上,用于在實際數(shù)據(jù)傳輸開始之前,通信雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。在Web開發(fā)中,我們是通過HTTPS來實現(xiàn)SSL的。HTTPS是以安全為目標(biāo)的HTTP通道,簡單來說就是HTTP的安全版,即在HTTP下加入SSL層,所以說HTTPS的安全基礎(chǔ)是SSL,不過這里有一個地方需要小伙伴們注意,就是我們現(xiàn)在市場上使用的都是TLS協(xié)議(Transport Layer Security,它來源于SSL),而不是SSL,由于SSL出現(xiàn)較早并且被各大瀏覽器支持因此成為了HTTPS的代名詞。

Why-為什么要用HTTPS

超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息。HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協(xié)議不適合傳輸一些敏感信息,比如信用卡號、密碼等。

為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS。為了數(shù)據(jù)傳輸?shù)陌踩?,HTTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議,SSL依靠證書來驗證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密。

HTTPS和HTTP的區(qū)別主要為以下四點:

一、https協(xié)議需要到ca申請證書,一般免費證書很少,需要交費。

二、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。

三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

四、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。

How-如何使用HTTPS和HTTP

如果你使用Spring Boot,并且想在內(nèi)嵌服務(wù)器中添加HTTPS,需要如下步驟:

要有一個SSL證書,買的或者自己生成的。

在Spring Boot中啟動HTTPS。

將HTTP重定向到HTTPS(可選)。

一.通過云平臺獲取SSL證書

證書獲取有兩種方式,一種是自己通過jdk的keytool命令生成,一種是通過證書授權(quán)機(jī)構(gòu)購買,本文為了方便采用第二種從阿里云購買證書。

去阿里云購買證書(免費版),并提交審核資料

下載SSL證書

在證書目錄下執(zhí)行阿里云提供的命令,密碼都填 pfx-password.txt 中的內(nèi)容(三次),會生成 javalsj.jks 文件。

復(fù)制代碼 代碼如下:
keytool -importkeystore -srckeystore 214533136960974.pfx -destkeystore javalsj.jks -srcstoretype PKCS12 -deststoretype JKS

二.通過jdk自帶的keytool工具進(jìn)行生成

生成證書(在要生成證書的目錄下,按著 Shit 建同時鼠標(biāo)右鍵出現(xiàn)[在此處打開命令窗口])

復(fù)制代碼 代碼如下:
keytool -genkey -alias test -keyalg RSA -keysize 1024 -keystore charleslai -validity 365

利用"keytool -list -v -keystore charleslai.jks"查看JKS中生成的證書的詳細(xì)信息

利用“keytool -alias test -exportcert -keystore test.jks -file charleslai.cer”,導(dǎo)出證書,并可以雙擊打開證書查看證書信息

在Spring Boot中啟動HTTPS和HTTP2

將charleslai.jks復(fù)制到Spring Boot應(yīng)用的resources目錄下

在application.properties中配置證書及端口,密碼填寫第3步中的密碼

##################################---Undertow服務(wù)器支持HTTPS服務(wù)---############################################## 
 
server.http2.enabled=true 
 
server.servlet.context-path=/blog 
 
custom.server.http.port=8080 
 
server.port=8443 
 
server.ssl.key-store=classpath:javalsj.jks 
 
server.ssl.key-store-password=214533136960974 
 
server.undertow.worker-threads=20 
 
server.undertow.buffer-size=512 
 
server.undertow.io-threads=2 

此配置會使Undertow容器監(jiān)聽8443端口,那么只有在域名前添加 https://才能訪問網(wǎng)站內(nèi)容,添加http://則不行,所以需要讓Undertow容器監(jiān)聽8080端口,并將8080端口的所有請求重定向到8443端口,即完成http到https的跳轉(zhuǎn)。

將HTTP重定向到HTTPS(可選)

工程使用Gradle集成輕量級高性能非阻塞服務(wù)器undertow所需要的jar包:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-undertow'

然后編寫代碼如下:

package com.javalsj.blog.configuration; 
 
import org.springframework.beans.factory.annotation.Value; 
 
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; 
 
import org.springframework.boot.web.servlet.server.ServletWebServerFactory; 
 
import org.springframework.context.annotation.Bean; 
 
import org.springframework.context.annotation.Configuration; 
 
import io.undertow.Undertow; 
 
import io.undertow.servlet.api.SecurityConstraint; 
 
import io.undertow.servlet.api.SecurityInfo; 
 
import io.undertow.servlet.api.TransportGuaranteeType; 
 
import io.undertow.servlet.api.WebResourceCollection; 
 
/** 
 
* @description 采用Undertow作為服務(wù)器,支持Https服務(wù)配置 
 
* @author WANGJIHONG 
 
* @date 2018年3月7日 下午8:34:18 
 
* @Copyright 版權(quán)所有 (c) www.javalsj.com 
 
* @memo 備注信息 
 
*/ 
 
@Configuration 
 
public class WebServerConfiguration { 
 
/** 
 
* http服務(wù)端口 
 
*/ 
 
@Value("${custom.server.http.port}") 
 
private Integer httpPort; 
 
/** 
 
* https服務(wù)端口 
 
*/ 
 
@Value("${server.port}") 
 
private Integer httpsPort; 
 
/** 
 
* 采用Undertow作為服務(wù)器。 
 
* Undertow是一個用java編寫的、靈活的、高性能的Web服務(wù)器,提供基于NIO的阻塞和非阻塞API,特點: 
 
* 非常輕量級,Undertow核心瓶子在1Mb以下。它在運行時也是輕量級的,有一個簡單的嵌入式服務(wù)器使用少于4Mb的堆空間。 
 
* 支持HTTP升級,允許多個協(xié)議通過HTTP端口進(jìn)行多路復(fù)用。 
 
* 提供對Web套接字的全面支持,包括JSR-356支持。 
 
* 提供對Servlet 3.1的支持,包括對嵌入式servlet的支持。還可以在同一部署中混合Servlet和本機(jī)Undertow非阻塞處理程序。 
 
* 可以嵌入在應(yīng)用程序中或獨立運行,只需幾行代碼。 
 
* 通過將處理程序鏈接在一起來配置Undertow服務(wù)器。它可以對各種功能進(jìn)行配置,方便靈活。 
 
*/ 
 
@Bean 
 
public ServletWebServerFactory undertowFactory() { 
 
UndertowServletWebServerFactory undertowFactory = new UndertowServletWebServerFactory(); 
 
undertowFactory.addBuilderCustomizers((Undertow.Builder builder) -> { 
 
builder.addHttpListener(httpPort, "0.0.0.0"); 
 
// 開啟HTTP2 
 
builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true); 
 
}); 
 
undertowFactory.addDeploymentInfoCustomizers(deploymentInfo -> { 
 
// 開啟HTTP自動跳轉(zhuǎn)至HTTPS 
 
deploymentInfo.addSecurityConstraint(new SecurityConstraint() 
 
.addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*")) 
 
.setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL) 
 
.setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT)) 
 
.setConfidentialPortManager(exchange -> httpsPort); 
 
}); 
 
return undertowFactory; 
 
} 
 
} 

驗證HTTPS和HTTP2開啟成功

重啟服務(wù),即完成了HTTP到HTTPS的升級,且能自動跳轉(zhuǎn)HTTPS,讓網(wǎng)站更安全。輸入http://localhost:8080/blog/swagger-ui.html后回車地址欄自動跳轉(zhuǎn)至https://localhost:8443/blog/swagger-ui.html,如圖:

使用Chrome瀏覽器的console控制臺,輸入腳本后回車查看HTTP2是否開啟,腳本如下:

(function(){ 
 
// 保證這個方法只在支持loadTimes的chrome瀏覽器下執(zhí)行 
 
if(window.chrome && typeof chrome.loadTimes === 'function') { 
 
var loadTimes = window.chrome.loadTimes(); 
 
var spdy = loadTimes.wasFetchedViaSpdy; 
 
var info = loadTimes.npnNegotiatedProtocol || loadTimes.connectionInfo; 
 
// 就以 「h2」作為判斷標(biāo)識 
 
if(spdy && /^h2/i.test(info)) { 
 
return console.info('本站點使用了HTTP/2'); 
 
} 
 
} 
 
console.warn('本站點沒有使用HTTP/2'); 
 
})(); 

總結(jié)

本文只是介紹了Undertow服務(wù)器的HTTPS支持,Spring Boot支持Jetty,Tomcat等服務(wù)器,不同的服務(wù)器實現(xiàn)可以查資料了解,嘿嘿

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot整合redis配置詳細(xì)示例代碼

    springboot整合redis配置詳細(xì)示例代碼

    Redis是一種高性能的鍵值存儲數(shù)據(jù)庫,而Spring Boot是一個簡化了開發(fā)過程的Java框架,將兩者結(jié)合可以輕松地在Spring Boot項目中使用Redis來實現(xiàn)數(shù)據(jù)緩存、會話管理和分布式鎖等功能,這篇文章主要給大家介紹了關(guān)于springboot整合redis配置的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • protobuf簡介及使用流程

    protobuf簡介及使用流程

    本文介紹了Protocol Buffers(protobuf)的數(shù)據(jù)結(jié)構(gòu)序列化和反序列化框架,包括其特點、使用流程和快速上手,通過一個簡單的通訊錄示例,展示了如何創(chuàng)建.proto文件、添加注釋、編寫消息定義、編譯.proto文件以及進(jìn)行序列化和反序列化操作,感興趣的朋友一起看看吧
    2025-02-02
  • 你知道怎么用Spring的三級緩存解決循環(huán)依賴嗎

    你知道怎么用Spring的三級緩存解決循環(huán)依賴嗎

    這篇文章主要為大家詳細(xì)介紹了Spring的三級緩存解決循環(huán)依賴,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Spring Boot整合Spring Security的示例代碼

    Spring Boot整合Spring Security的示例代碼

    這篇文章主要介紹了Spring Boot整合Spring Security的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • spring中的ObjectPostProcessor詳解

    spring中的ObjectPostProcessor詳解

    這篇文章主要介紹了spring中的ObjectPostProcessor詳解,Spring Security 的 Java 配置不會公開其配置的每個對象的每個屬性,這簡化了大多數(shù)用戶的配置,畢竟,如果每個屬性都公開,用戶可以使用標(biāo)準(zhǔn) bean 配置,需要的朋友可以參考下
    2024-01-01
  • JAVA實現(xiàn)DOC轉(zhuǎn)PDF的示例代碼

    JAVA實現(xiàn)DOC轉(zhuǎn)PDF的示例代碼

    Word作為目前主流的文本編輯軟件之一,功能十分強(qiáng)大,但是在傳輸?shù)臅r候不穩(wěn)定,那么如何從DOC轉(zhuǎn)PDF,本文就來介紹一下,感興趣的可以了解一下
    2021-08-08
  • mybatis深入講解resultMap的定義及用法

    mybatis深入講解resultMap的定義及用法

    MyBatis的每一個查詢映射的返回類型都是ResultMap,當(dāng)我們提供返回類型屬性是resultType時,MyBatis會自動給我們把對應(yīng)值賦給resultType所指定對象的屬性,當(dāng)我們提供返回類型是resultMap時,將數(shù)據(jù)庫中列數(shù)據(jù)復(fù)制到對象的相應(yīng)屬性上,可以用于復(fù)制查詢,兩者不能同時用
    2022-04-04
  • java 實現(xiàn)微信服務(wù)器下載圖片到自己服務(wù)器

    java 實現(xiàn)微信服務(wù)器下載圖片到自己服務(wù)器

    這篇文章主要介紹了 java 實現(xiàn)微信服務(wù)器下載圖片到自己服務(wù)器的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java中instanceof關(guān)鍵字實例講解

    Java中instanceof關(guān)鍵字實例講解

    大家好,本篇文章主要講的是Java中instanceof關(guān)鍵字實例講解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • JavaWeb 使用Session實現(xiàn)一次性驗證碼功能

    JavaWeb 使用Session實現(xiàn)一次性驗證碼功能

    這篇文章主要介紹了JavaWeb 使用Session實現(xiàn)一次性驗證碼功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08

最新評論

广西| 盐池县| 谢通门县| 商河县| 惠来县| 淮安市| 甘肃省| 济南市| 滁州市| 安远县| 涪陵区| 红原县| 蕲春县| 二连浩特市| 合作市| 广汉市| 虹口区| 高阳县| 雅安市| 富平县| 成武县| 成都市| 梨树县| 黄大仙区| 上林县| 连江县| 吉隆县| 台州市| 黄陵县| 灵武市| 临沧市| 大关县| 玉树县| 永善县| 达日县| 青神县| 佛山市| 星子县| 禹州市| 锦州市| 宜章县|