Springboot-WebFlux实现http重定向到https

栏目: IT技术 · 发布时间: 4年前

内容简介:作为餐前小吃,建议大家先吃以下

1 简介

Spring WebFlux 是一个新兴的技术, Spring 团队把宝都压在响应式 Reactive 上了,于是推出了全新的 Web 实现。本文不讨论响应式编程,而是通过实例讲解 Springboot WebFlux 如何把 http 重定向到 https

Springboot-WebFlux实现http重定向到https

作为餐前小吃,建议大家先吃以下 https 小菜,以帮助理解:

(1) Springboot整合https原来这么简单

(2) HTTPS之密钥知识与密钥工具Keytool和Keystore-Explorer

(3) Springboot以Tomcat为容器实现http重定向到https的两种方式

(4) Springboot以Jetty为容器实现http重定向到https

(5) nginx开启ssl并把http重定向到https的两种方式

2 搭建WebFlux项目

引入 WebFlux 的依赖如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

实现 Controller ,与之前略有不同,返回值为 Mono<T>

@RestController
public class HelloController {
    @GetMapping("/hello")
    public Mono<String> hello() {
        return Mono.just("Welcome to www.pkslow.com");
    }
}

配置文件与普通的 Springboot 项目没什么差别,配置了两个端口,并配置 SSL 相关参数:

server.port=443
http.port=80

server.ssl.enabled=true
server.ssl.key-store-type=jks
server.ssl.key-store=classpath:localhost.jks
server.ssl.key-store-password=changeit
server.ssl.key-alias=localhost

3 重定向实现

主要做了两件事:

(1)在有 https 的情况下,启动另一个 http 服务,主要通过 NettyReactiveWebServerFactory 来生成一个 Web 服务。

(2)把 http 重定向到 https ,这里做了路径判断,加了一个简单的过滤函数。通过提供一个新的 HttpHandler 来实现重定向。

package com.pkslow.ssl.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.HttpHandler;
import reactor.core.publisher.Mono;
import javax.annotation.PostConstruct;
import java.net.URI;
import java.net.URISyntaxException;

@Configuration
public class HttpToHttpsConfig {

    @Value("${server.port}")
    private int httpsPort;

    @Value("${http.port}")
    private int httpPort;


    @Autowired
    private HttpHandler httpHandler;

    @PostConstruct
    public void startRedirectServer() {
        NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(httpPort);
        factory.getWebServer(
                (request, response) -> {
                    URI uri = request.getURI();
                    URI httpsUri;
                    try {
                        if (isNeedRedirect(uri.getPath())) {
                            httpsUri = new URI("https",
                                    uri.getUserInfo(),
                                    uri.getHost(),
                                    httpsPort,
                                    uri.getPath(),
                                    uri.getQuery(),
                                    uri.getFragment());
                            response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
                            response.getHeaders().setLocation(httpsUri);
                            return response.setComplete();
                        } else {
                            return httpHandler.handle(request, response);
                        }

                    } catch (URISyntaxException e) {
                        return Mono.error(e);
                    }
                }
        ).start();

    }

    private boolean isNeedRedirect(String path) {
        return !path.startsWith("/actuator");
    }
}

4 总结

本文详细代码可在 南瓜慢说 公众号回复< SpringbootSSLRedirectWebFlux >获取。

欢迎访问 南瓜慢说 www.pkslow.com 获取更多精彩文章!

欢迎关注微信公众号< 南瓜慢说 >,将持续为你更新...

Springboot-WebFlux实现http重定向到https

多读书,多分享;多写作,多整理。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

An Introduction to the Analysis of Algorithms

An Introduction to the Analysis of Algorithms

Robert Sedgewick、Philippe Flajolet / Addison-Wesley Professional / 1995-12-10 / CAD 67.99

This book is a thorough overview of the primary techniques and models used in the mathematical analysis of algorithms. The first half of the book draws upon classical mathematical material from discre......一起来看看 《An Introduction to the Analysis of Algorithms》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具