当前位置:首页 > 服务端 > 关于 springcloud gateway 设置 context-path 的问题

关于 springcloud gateway 设置 context-path 的问题

2022年11月09日 10:09:19服务端9

大家好,我是烤鸭:

      今天说一下遇到的问题,关于 springcloud gateway 设置 context-path 的问题。


1.  使用场景


由于没有申请二级域名,网关使用的地址是 xxx.com/gateway/ 用nginx转发的时候 /gateway/ 也被用来寻址。
gateway 没办法设置 context-path ,针对我这个场景有3个解决方案。

2.  解决方案


2.1 增加本地路由(有一个网址指向自己,这里就是 /gateway)

spring:
  cloud:
    gateway:
      routes:
      # 网关本身没有contextPath,通过自己转发自己,达到能处理contextPath
      - id: self
        uri: http://localhost:${server.port}
        predicates:
        - Path=/${spring.application.name}/**
        filters:
        - StripPrefix=1
        order: -11000

这种方式会丢失请求,暂时没考虑原因,就pass了。

2.2 增加过滤器,改写路径


ApiFilter.java

package com.yiche.ballast.filter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.WebFilter;
import reactor.core.publisher.Mono;


@Configuration
public class ApiFilter {
    @Value("${spring.cloud.gateway.api-prefix:/gateway}")
    private String prefix;

    @Bean
    @Order(-1)
    public WebFilter apiPrefixFilter() {
        return (exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();

            String path = request.getURI().getRawPath();
            if (!path.contains(prefix)) {
                ServerHttpResponse response = exchange.getResponse();
                response.setStatusCode(HttpStatus.BAD_GATEWAY);

                DataBuffer buffer = response
                        .bufferFactory()
                        .wrap(HttpStatus.BAD_GATEWAY.getReasonPhrase().getBytes());
                return response.writeWith(Mono.just(buffer));
            }
            String newPath = path.replaceFirst(prefix, "");
            ServerHttpRequest newRequest = request.mutate().path(newPath).build();

            return chain.filter(exchange.mutate().request(newRequest).build());
        };
    }
}


这样/gateway 请求进来之后,转发到routers 的时候会把 /gateway去掉,缺点是每个请求进来都需要对路径处理一次。
能配置的尽量不写代码。

2.3 修改配置,在所有的router路径前加前缀(这里就是都加上 /gateway)

spring:
    cloud:
        gateway:
            routes:
            - id: api-route
              filters:
                - StripPrefix=1
              predicates:
                - name: Path
                  args[pattern]: /gateway/api/**
              uri: lb://xxx-api

偷懒的做法,路由多的时候也挺难受。

现在路由不多,选择了第三种方式。看各自的场景选择吧。

作者:烤鸭的世界我们不懂
来源链接:https://blog.csdn.net/Angry_Mills/article/details/108132203

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68737.html

标签: Gateway
分享给朋友:

“关于 springcloud gateway 设置 context-path 的问题” 的相关文章

微服务网关springcloud gateway整合sentinel自定义异常

异常包括限流异常和熔断降级异常。 1. 定义配置类方式 package com.ftsafe.config; import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandle...

最新版本SpringCloud Gateway网关入门(一)

最新版本SpringCloud Gateway网关入门(一)

文章目录 背景 SpringCloud Gateway 简介 Gateway入门搭建 1. 创建一个SpringBoot...

Spring Cloud Gateway中文文档一到五章(3.1.0)

Spring Cloud Gateway中文文档一到五章(3.1.0)

Spring Cloud Gateway 3.1.0 本项目提供了一个基于Spring 5、Spring Boot 2 和 Project Reactor的 Spring 生态系统之上的 API 网关。Spring Cloud Gateway 旨在...

GateWay路由网关的概述与入门详解

GateWay路由网关的概述与入门详解

一、概述简介 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1.是什么? Cloud全家桶中...

九、Spring Cloud 微服务之 Gateway

九、Spring Cloud 微服务之 Gateway

文章目录 Gateway 新一代网关 1. 概述简介 1.1 是什么? 1.2 能干嘛 1.3 微服务架构...

Spring Cloud Gateway(CVE-2022-22947)漏洞复现

Spring Cloud Gateway(CVE-2022-22947)漏洞复现

1.漏洞介绍 当Spring Cloud Gateway启用和暴露 Gateway Actuator 端点时,使用 Spring Cloud Gateway 的应用程序可受到代码注入攻击。攻击者可以发送特制的恶意请求,从而远程执行任意代码。  ...

Springcloud gateway (史上最全)

Springcloud gateway (史上最全)

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》持续更新+ 史上最全 + 面试必备 2000页+ 面试必备...

SpringCloudAlibaba-服务网关Gateway

SpringCloudAlibaba-服务网关Gateway

一:网关简介 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例如: 客户端多次请求不同的微服务,增加客户端代码或配置编写...

Spring Cloud Gateway介绍(一)

Spring Cloud Gateway介绍(一)

特性 基于 Java 8 编码 基于 Spring Framework 5 + Project Reactor + Spring Boot 2.0 构建 支持动态路由,能够匹配任何请求属性上的路由 支持内置到 Spring Handler 映射中的...

apigateway-kong(四)负载均衡理论及实现

Kong为多个后端服务提供了多种负载平衡请求方式:一种基于DNS的简单方法,以及一种更加动态的环平衡器,该方法还允许在不需要DNS服务器的情况下进行服务注册。 基于DNS的负载均衡   当使用基于DNS的负载均衡时,后端服务的注册是在Kong以外完成的,而Kong仅接收来自DNS服务器...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。