首页 > 其他分享 >解决Spring Cloud Gateway路由问题 503

解决Spring Cloud Gateway路由问题 503

时间:2023-11-23 22:33:06浏览次数:26  
标签:请求 corsConfiguration Spring 问题 Cloud 503 路由


近期在配置 Spring Cloud Gateway 进行路由时,遇到了一些问题,经过一番排查和调试,最终解决了问题。在这篇博客中,我将分享遇到的问题、解决过程以及最终的解决方案。

问题背景

我使用 Spring Cloud Gateway 构建微服务架构时,希望通过网关实现请求的路由。然而,在配置路由规则时,我遇到了一些意外的问题。具体来说,我发现无法通过网关将请求正确地路由到后端服务。

第一步:打印请求进行排查

为了更好地了解问题的根本原因,我决定在 Spring Cloud Gateway 中添加一个过滤器,用于打印网关获取的请求信息。通过打印请求,我希望能够判断是前端还是后端出现了问题。

import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
public class LoggingFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 打印请求信息
        System.out.println("Request URI: " + exchange.getRequest().getURI());
        // 其他打印操作...

        // 继续执行过滤器链
        return chain.filter(exchange);
    }
}

通过这个过滤器,我成功地在控制台上看到了每个请求的详细信息。

第二步:确认是前端还是后端出现问题

通过打印请求信息,我发现网关成功地获取到了请求,但请求未能成功路由到后端服务。为了进一步排查问题,我配置了一系列的路由规则,包括将请求直接路由到后端服务的规则,以判断是前端还是后端出现了问题。

发现问题:跨域问题

在排查过程中,我怀疑问题可能与跨域请求有关。于是,我尝试配置跨域支持,包括在网关中添加跨域配置,但问题依然存在。

@Configuration
public class CorsConfig {

    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", corsConfiguration);

        return new CorsWebFilter(source);
    }
}

最终解决:Ribbon负载均衡

最后我将uri直接修改为地址进行路由,结果成功了。

在一番搜索和资料查阅后,我发现在 Spring Cloud 2020 版本中,Ribbon 已经被弃用,无法再通过 lb 进行路由。而我的配置中正是使用了 lb 关键字。

解决办法是导入负载均衡支持,确保项目中包含了相关依赖。在我的情况下,我添加了以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

导入负载均衡支持后,我将路由规则中的 lb 修改为直接写明后端服务的地址,问题迎刃而解。

spring:
  cloud:
    gateway:
      routes:
        - id: my-route
          uri: http://backend-service
          predicates:
            - Path=/api/**

标签:请求,corsConfiguration,Spring,问题,Cloud,503,路由
From: https://www.cnblogs.com/just1t/p/17852684.html

相关文章

  • springboot定时任务线程池配置拾遗--利用配置类进行配置
    springboot定时任务线程池配置拾遗--利用配置类进行配置目录springboot定时任务线程池配置拾遗--利用配置类进行配置1springboot自动装配1.1通过TaskSchedulingProperties获取yaml参数1.2TaskSchedulingAutoConfiguration自动配置类根据TaskSchedulingProperties的配置装配线......
  • Playwright爬虫绕过Cloudflare人机验证
    1.问题描述有些网关接入了Cloudflare的人机验证组件,当使用Playwright等自动化工具爬取的时候,会被人机验证阻拦。阻断的效果如下:2.问题原因Selenium、Puppeteer、Playwright等自动化控制工具的实现都会遵循一个规范,就是使用这些工具的时候,获取navigator的webdriver属性时......
  • Ossclient无法自动装配和包aliyun-oss-spring-boot-starter导入错误
    无法导包 aliyun-oss-spring-boot-starter 解决办法:把 aliyun-oss-spring-boot-starter换成即可<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3......
  • springboot 集成swagger3.0 并开启权限认证
    1.POM文件只需要引入一个依赖即可  2.swagger配置文件如下注意:要添加“@EnableWebMvc"注解,详细代码如下:@Configuration@EnableWebMvcpublicclassSwaggerConfig{@Value("${swagger.enabled}")booleanenabled;@BeanpublicDocketdocket(){r......
  • Springboot文件上传代码笔记
    1.在src下创建filter包,包内Class名UploadFilterpackagecom.gd.filter;importorg.apache.catalina.servlet4preview.http.HttpServletRequest;importjavax.servlet.*;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.HttpServletResponse;impor......
  • Spring_2023_11_23_3 Spring整合mybatis----注解方式
    Spring整合mybatis----注解方式2023-11-2317:18:29星期四a) 依赖的引入<!--spring基础依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><ver......
  • Spring
    Overview<ulclass="tree"> <li>  <detailsopen>   <summary>Giantplanets</summary>   <ul>    <li>     <details>      <summary>Gasgiants</summary>      <......
  • Springboot 自动发送邮件
      完成Springboot配置发件邮箱,自动给其他邮箱发送邮件功能一、创建springboot基础项目,引入依赖<!--SpringBoot邮件依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency&g......
  • 解决spring gateway 在globalFilter 中改写response后前端接到的数据不完整问题
    表现情况1. 前端请求后不响应2.前端接到的数据不完整 是因为修改返回体后没修改header中的content-length.设置成正确的content-length就可以了response.getHeaders().setContentLength(bodyStr.getBytes().length);参考https://juejin.cn/post/7050273290752884743......
  • spring和springboot定时任务线程池配置
    spring和springboot定时任务线程池配置目录spring和springboot定时任务线程池配置1背景2配置2.1命名空间配置2.2yaml配置3参考文档1背景项目有几个新增的月末报表生成定时任务(使用spring内置的TaskScheduler),相关业务人员反馈报表没有及时生成,让我比较疑惑:虽然生成比较耗......