栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot-WebFlux实现http重定向到https

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot-WebFlux实现http重定向到https

1 简介

Spring WebFlux是一个新兴的技术,Spring团队把宝都压在响应式Reactive上了,于是推出了全新的Web实现。本文不讨论响应式编程,而是通过实例讲解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的依赖如下:


  org.springframework.boot
  spring-boot-starter-webflux

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

@RestController
public class HelloController {
    @GetMapping("/hello")
    public Mono 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 总结

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

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

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号