返回顶部
首页 > 资讯 > 后端开发 > Python >springcloud gateway设置context-path的操作
  • 852
分享到

springcloud gateway设置context-path的操作

2024-04-02 19:04:59 852人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

今天说一下遇到的问题,关于 SpringCloud gateway 设置 context-path 的问题。 1.使用场景 由于没有申请二级域名,网关使用的地址是 xxx.com/g

今天说一下遇到的问题,关于 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

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

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

sprinGCloud 的gateway踩坑

添加了路由规则的配置以后,SpringCloud无法正常启动,启动的时候报错

1、配置文件中开启debug=true模式

错误信息显示缺少javax.validation.ValidatorException类;

2、在pom文件中添加hibernate-validator(以及所有相关依赖)

3、结果仍旧报错,此时错误信息:

不能为空,之前是配置在yml文件中,后来换成了properties,问题就解决了;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: springcloud gateway设置context-path的操作

本文链接: https://lsjlt.com/news/130563.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springcloud gateway设置context-path的操作
    今天说一下遇到的问题,关于 springcloud gateway 设置 context-path 的问题。 1.使用场景 由于没有申请二级域名,网关使用的地址是 xxx.com/g...
    99+
    2024-04-02
  • SpringCloud gateway跨域配置的操作
    gateway跨域配置 gateway允许跨域的配置和zuul的不一样,记录一下。 版本 <parent> <groupId>org.s...
    99+
    2024-04-02
  • SpringCloud gateway跨域配置的操作方式
    这篇文章主要介绍“SpringCloud gateway跨域配置的操作方式”,在日常操作中,相信很多人在SpringCloud gateway跨域配置的操作方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
    99+
    2023-06-20
  • Web应用中怎么设置Context Path
    要设置Web应用的Context Path,可以在Web应用的部署描述文件中指定。在Java EE中,可以在web.xml文件中使用...
    99+
    2024-03-05
    Web
  • Web应用中设置Context Path案例详解
    URL:http://hostname.com/contextPath/servletPath/pathInfo Jetty 如果没有contextPath,则默认使用root上下文...
    99+
    2024-04-02
  • 基于springboot 配置文件context-path的坑
    目录配置文件context-path的坑context-path配置失效问题配置文件context-path的坑 context-path: /manage 这个配置加入后会导致访问...
    99+
    2024-04-02
  • Java之Springcloud Gateway内置路由的示例分析
    这篇文章给大家分享的是有关Java之Springcloud Gateway内置路由的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring Cloud Gateway路由匹配是Spring WebFl...
    99+
    2023-06-20
  • 解决springcloud 配置gateway 出现错误的问题
    降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不报错了,很奇怪。 也发现gateway版本从2.2.6降到2.2.3了 大坑:...
    99+
    2024-04-02
  • 解决SpringCloud Gateway配置自定义路由404的坑
    目录问题背景问题现象解决过程1 检查网关配置2 跟源码,查找可能的原因3 异常原因分析解决方法心得问题背景 将原有项目中的websocket模块迁移到基于SpringCloud Al...
    99+
    2024-04-02
  • goland 设置project gopath的操作
    用goland打开别人的go项目。可能碰到下面的问题goland cannot find package "server/common/config" in any of: 这是因为...
    99+
    2024-04-02
  • java的path的设置路径
    在 Java 中设置路径可以使用 `System.setProperty()` 方法来设置系统属性,具体如下:```javaSyst...
    99+
    2023-09-15
    Java
  • Mysql 设置boolean类型的操作
    Mysql 设置boolean类型 1.tinyint类型 我们创建test表,并设置其bl字段为boolean类型 create table test( id int PRIMARY key, status...
    99+
    2022-05-23
    Mysql 设置boolean类型
  • IntelliJ IDEA的build path设置方法
    IntelliJ IDEA的build path设置: 1.打开IDEA–>File–>Project Structure–>Modules 2.选中要添加的项目名...
    99+
    2024-04-02
  • java的path怎么设置路径
    在Java中设置路径可以通过使用File类来指定路径。以下是一些常见的路径设置方法: 使用绝对路径: String path =...
    99+
    2024-03-02
    java
  • spring cloud gateway集成hystrix全局断路器的操作
    这篇文章主要讲解了“spring cloud gateway集成hystrix全局断路器的操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spring cloud gateway集成hys...
    99+
    2023-06-20
  • go语言context包功能及操作使用的方法
    本篇内容介绍了“go语言context包功能及操作使用的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Context包到底是干嘛用的?我...
    99+
    2023-06-30
  • goland设置颜色和字体的操作
    如下所示: 补充:Goland调整Terminal窗口字体大小 Goland的Ternimal窗口样式和Console窗口公用同一个样式,修改路径: Settin...
    99+
    2024-04-02
  • docker 设置windows存储路径的操作
    在win10下安装docker时,选择container类型为Linux container之后,设置存储路径不能再通过修改daemon的graph值配置了,具体修改方式如下图: 第...
    99+
    2024-04-02
  • github权限设置怎么操作
    GitHub是全球最大的程序员社交平台之一,既可以创建仓库托管项目,也可以进行协作开发。而为了保护用户的数据安全,GitHub提供了丰富的权限设置功能,让用户可以自由地控制自己的仓库以及与团队的协作。一、仓库权限设置一般来说,在GitHub...
    99+
    2023-10-22
  • SpringCloud feign服务熔断下的异常处理操作
    今天做项目的时候,遇到一个问题,如果我调用某个服务的接口,但是这个服务挂了,同时业务要求这个接口的结果是必须的,那我该怎么办呢,答案是通过hystrix,但是又有一点,服务不是平白无...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作