一.使用SpringBoot自帶的Tomcat實現Https:
1.生成SSL證書
打開cmd窗口,輸入如下命令
keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore
按照提示進行操作
輸入密鑰庫口令:123456
再次輸入新口令:123456
您的名字與姓氏是什么?
[Unknown]: abc
您的組織單位名稱是什么?
[Unknown]: abc
您的組織名稱是什么?
[Unknown]: abc
您所在的城市或區域名稱是什么?
[Unknown]: changzhou
您所在的省/市/自治區名稱是什么?
[Unknown]: jiangsu
該單位的雙字母國家/地區代碼是什么?
[Unknown]: china
CN=kaibowang, OU=yuxuelian, O=yuxuelian, L=chengdu, ST=chengdushi, C=china是否正確?
[否]: y
輸入 <tomcat> 的密鑰口令
(如果和密鑰庫口令相同, 按回車):
再次輸入新口令:
Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore C:\Users\Administrator\.keystore -destkeystore C:\Users\Administrator\.keystore -deststoretype pkcs12" 遷移到行業標准格式 PKCS12。
創建完成后,可在用戶根目錄查看生成的keystore文件
2.新建Springboot項目,將生成的server.keystore放在根目錄(pom.xml同級),配置application.properties
server.port=8443
server.http2.enabled=true
server.ssl.key-store=server.keystore
server.ssl.key-alias=tomcat
server.ssl.enabled=true
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS
向容器中注入兩個Bean
@Bean
public Connector connector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
TomcatServletWebServerFactory tomcat=new TomcatServletWebServerFactory(){
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint=new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection=new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
編寫一個測試接口
@Controller
public class TestController {
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
}
可以看到https配置成功
二:使用undertow配置https,同時支持http
去除自帶tomcat,引入undertow
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
配置支持HTTP/2
由於Spring Boot 2.0已經增加了對HTTP/2的支持,所以啟用HTTP/2非常簡單,只需要在resources/application.properties開啟http2即可。
server.http2.enabled=true
1.生成ssl和配置application.properties與上面一樣,不做展示了。
2.增加一個undertowFactory的配置類,支持http
@Configuration
public class HttpsConfig {
@Bean
public ServletWebServerFactory undertowFactory() {
UndertowServletWebServerFactory undertowFactory = new UndertowServletWebServerFactory();
UndertowBuilderCustomizer undertowBuilderCustomizer = new UndertowBuilderCustomizer() {
@Override
public void customize(Undertow.Builder builder) {
builder.addHttpListener(8888, "0.0.0.0");
}
};
undertowFactory.addBuilderCustomizers(undertowBuilderCustomizer);
return undertowFactory;
}
}
測試:
HTTP測試:上面定義的HTTP端口是8888,所以輸入網址http://localhost:8080
HTTPS測試:上面定義的HTTPS端口是8443,所以輸入網址https://localhost:8443
————————————————
版權聲明:本文為CSDN博主「屌絲程序員」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_27560083/article/details/94391808