Springboot啓動https和http2

在Spring Boot中啓動HTTPS和HTTP2

將javalsj.jks複製到Spring Boot應用的resources目錄下
圖片描述

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

##################################---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

圖片描述
此配置會使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'
然後編寫代碼如下:

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;
    }
    
}

圖片描述

驗證HTTPS和HTTP2開啓成功

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

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章