Spring cloud gateway 配置ssl


今天主要是在给gateway配置ssl证书的时候遇到一些问题,记下来,给有需要的同学做个参考。

证书的下载就不在这篇文章里赘述了,在阿里云或者其他云厂商都可以免费申请ssl证书。


yml 配置文件信息

server:
  #https 监听端口
  port: 443
  #http 监听端口
  http:
    port: 80
  ssl:
    enabled: true
    key-alias: tomcat
    key-store-password: 证书密码
    key-store: classpath:cert/server.jks
    key-store-type: JKS
    
spring:
  cloud:
    gateway:
      httpclient:
        ssl:
        # 实现微服务之间https调用
          useInsecureTrustManager: true 
http 自动跳转https
package com.laiya.gateway.config;

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 reactor.core.publisher.Mono;

import javax.annotation.PostConstruct;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * @author :chao.z
 * @date :Created in 2020/6/24 7:07 下午
 */
@Configuration
public class HttpToHttpsRedirectConfig {
    @Value("${server.http.port}")
    private int httpPort;
    @Value("${server.port}")
    private int serverPort;

    @PostConstruct
    public void startRedirectServer() {
        NettyReactiveWebServerFactory httpNettyReactiveWebServerFactory = new NettyReactiveWebServerFactory(httpPort);
        httpNettyReactiveWebServerFactory.getWebServer((request, response) -> {
            URI uri = request.getURI();
            URI httpsUri;
            try {
                httpsUri = new URI("https", uri.getUserInfo(), uri.getHost(), serverPort, uri.getPath(), uri.getQuery(), uri.getFragment());
            } catch (URISyntaxException e) {
                return Mono.error(e);
            }
            response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
            response.getHeaders().setLocation(httpsUri);
            return response.setComplete();
        }).start();
    }

  • 443端口为https请求端口
  • 80 端口为http请求端口
  • 通过启动项目会自动加载配置,实现http自动跳转https

Springcloud gateway 是netty启动,所以用netty的替换方式,目前官方没有具体的解决方案。

Tips:
1.端口可以自己定义,在云服务器上注意检查端口是开启
2.设置80和443 是为了输入域名请求时不带端口号。
3.设置https 请求后,注意静态页面引用的地址也需要改成https
建议修改成""
3.以"//"开头表示相对协议,页面使用的是什么协议,文件请求也自动是什么协议。同样的异步请求也应该这样适应。

你可能感兴趣的:(Spring cloud gateway 配置ssl)