国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

2021-06-23 13:52養碼場007 Java教程

這篇文章考慮如何讓Spring Boot應用程序同時支持HTTP和HTTPS兩種協議。小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

如今,企業級應用程序的高性能安全加密的常見場景是同時支持http和https兩種協議,這篇文章考慮如何讓spring boot應用程序同時支持http和https兩種協議。spring boot的web容器已經有容器可以支持http2了,這個例子中選擇了undertow高性能服務器作為spring boot的web容器。

what-什么是http2

http2是http協議自1999年http1.1發布后的首個更新,主要基于spdy協議。由互聯網工程任務組(ietf)的 hypertext transfer protocol bis(httpbis)工作小組進行開發。該組織于2014年12月將http/2標準提議遞交至iesg進行討論,于2015年2月17日被批準。http2標準于2015年5月以rfc7540正式發表。

why-為什么要用http2

http2是第二代的http協議,關于http2的優點這里就不闡述了,可以參考下面鏈接文章了解: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的提速。

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

what-什么是https

要說https我們得先說ssl(secure sockets layer,安全套接層),這是一種為網絡通信提供安全及數據完整性的一種安全協議,ssl在網絡傳輸層對網絡連接進行加密。ssl協議可以分為兩層:ssl記錄協議(ssl record protocol),它建立在可靠的傳輸協議如tcp之上,為高層協議提供數據封裝、壓縮、加密等基本功能支持;ssl握手協議(ssl handshake protocol),它建立在ssl記錄協議之上,用于在實際數據傳輸開始之前,通信雙方進行身份認證、協商加密算法、交換加密密鑰等。在web開發中,我們是通過https來實現ssl的。https是以安全為目標的http通道,簡單來說就是http的安全版,即在http下加入ssl層,所以說https的安全基礎是ssl,不過這里有一個地方需要小伙伴們注意,就是我們現在市場上使用的都是tls協議(transport layer security,它來源于ssl),而不是ssl,由于ssl出現較早并且被各大瀏覽器支持因此成為了https的代名詞。

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

why-為什么要用https

超文本傳輸協議http協議被用于在web瀏覽器和網站服務器之間傳遞信息。http協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此http協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。

為了解決http協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議https。為了數據傳輸的安全,https在http的基礎上加入了ssl協議,ssl依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。

https和http的區別主要為以下四點:

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

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

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

四、http的連接很簡單,是無狀態的;https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

how-如何使用https和http

如果你使用spring boot,并且想在內嵌服務器中添加https,需要如下步驟:

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

在spring boot中啟動https。

將http重定向到https(可選)。

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

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

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

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

下載ssl證書

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

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

 

復制代碼 代碼如下:
keytool -importkeystore -srckeystore 214533136960974.pfx -destkeystore javalsj.jks -srcstoretype pkcs12 -deststoretype jks

 

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

二.通過jdk自帶的keytool工具進行生成

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

 

復制代碼 代碼如下:
keytool -genkey -alias test -keyalg rsa -keysize 1024 -keystore charleslai -validity 365

 

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

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

在spring boot中啟動https和http2

將charleslai.jks復制到spring boot應用的resources目錄下

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
##################################---undertow服務器支持https服務---##############################################
 
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

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

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

將http重定向到https(可選)

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

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

然后編寫代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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作為服務器,支持https服務配置
 
* @author wangjihong
 
* @date 2018年3月7日 下午8:34:18
 
* @copyright 版權所有 (c) www.javalsj.com
 
* @memo 備注信息
 
*/
 
@configuration
 
public class webserverconfiguration {
 
/**
 
* http服務端口
 
*/
 
@value("${custom.server.http.port}")
 
private integer httpport;
 
/**
 
* https服務端口
 
*/
 
@value("${server.port}")
 
private integer httpsport;
 
/**
 
* 采用undertow作為服務器。
 
* undertow是一個用java編寫的、靈活的、高性能的web服務器,提供基于nio的阻塞和非阻塞api,特點:
 
* 非常輕量級,undertow核心瓶子在1mb以下。它在運行時也是輕量級的,有一個簡單的嵌入式服務器使用少于4mb的堆空間。
 
* 支持http升級,允許多個協議通過http端口進行多路復用。
 
* 提供對web套接字的全面支持,包括jsr-356支持。
 
* 提供對servlet 3.1的支持,包括對嵌入式servlet的支持。還可以在同一部署中混合servlet和本機undertow非阻塞處理程序。
 
* 可以嵌入在應用程序中或獨立運行,只需幾行代碼。
 
* 通過將處理程序鏈接在一起來配置undertow服務器。它可以對各種功能進行配置,方便靈活。
 
*/
 
@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自動跳轉至https
 
deploymentinfo.addsecurityconstraint(new securityconstraint()
 
.addwebresourcecollection(new webresourcecollection().addurlpattern("/*"))
 
.settransportguaranteetype(transportguaranteetype.confidential)
 
.setemptyrolesemantic(securityinfo.emptyrolesemantic.permit))
 
.setconfidentialportmanager(exchange -> httpsport);
 
});
 
return undertowfactory;
 
}
 
}

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

驗證https和http2開啟成功

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

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(function(){
 
// 保證這個方法只在支持loadtimes的chrome瀏覽器下執行
 
if(window.chrome && typeof chrome.loadtimes === 'function') {
 
var loadtimes = window.chrome.loadtimes();
 
var spdy = loadtimes.wasfetchedviaspdy;
 
var info = loadtimes.npnnegotiatedprotocol || loadtimes.connectioninfo;
 
// 就以 「h2」作為判斷標識
 
if(spdy && /^h2/i.test(info)) {
 
return console.info('本站點使用了http/2');
 
}
 
}
 
console.warn('本站點沒有使用http/2');
 
})();

Spring Boot實現Undertow服務器同時支持HTTP2、HTTPS的方法

總結

本文只是介紹了undertow服務器的https支持,spring boot支持jetty,tomcat等服務器,不同的服務器實現可以查資料了解,嘿嘿

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://server.51cto.com/sOS-588962.htm

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品中文字幕大胸 | 成人特黄a级毛片免费视频 国产在线视频一区二区 | 精品黄色 | 久久久久网站 | 黄色精品在线 | 91麻豆精品国产91久久久资源速度 | 国内自拍偷拍视频 | 久久久在线免费观看 | 91色在线视频 | 亚洲精品久久久久久动漫 | 狠狠狠狠狠狠 | 黄免费看 | 伊人春色在线播放 | 伊人一区| 国产高清精品在线 | 欧美成人精品激情在线观看 | 国产精品一卡二卡三卡 | 国产成人一区二区 | 国产97在线播放 | 日韩视频一区二区 | 国产欧美综合一区二区三区 | 最新国产一区 | 一区二区三区视频免费 | 亚洲高清日本 | 亚洲精品视频一区二区三区 | 免费午夜电影 | 日韩有码在线观看 | 激情亚洲| 国产免费黄色 | 亚洲综合无码一区二区 | 一区视频在线播放 | 天堂欧美城网站网址 | 国产婷婷色一区二区三区 | 欧美一区二区在线播放 | 亚洲一区欧美 | 91精品一区二区 | av中文字幕免费在线观看 | 久久人人爽人人爽人人片亚洲 | 中文字幕高清视频 | 国产精品伊人影院 | 欧美亚洲三级 |