Маршрутизация весеннего облачного шлюза не работает

#spring #spring-boot #spring-cloud #spring-cloud-gateway

Вопрос:

Я использую Spring Cloud(Hoxton.SR10) с загрузкой Spring (2.2.6.РЕЛИЗ)

Я регистрирую свои услуги на сервере Eureka 8761

и у меня есть шлюз-сервис для управления маршрутизацией (на данный момент без какой-либо безопасности).

 # profil DEV
---
spring:
  profiles: dev

  cloud:
    gateway:
      routes:
        - id: pr-api-id
          uri: http://localhost:8086/
          predicates:
           - Path=/api/**
 

и это то, что pom.xml

 <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-actuator</artifactId>
</dependency>
<!-- Spring cloud eureka client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 

когда я звоню localhost:9092/api/v0 (у меня есть служба localhost:8086/v0 , которая работает нормально), она должна возвращать мне тот же результат localhost:8086/v0 du для маршрутизации spring cloud gateway

но я получил ошибку http 404

 This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Sep 27 12:46:20 CEST 2021
There was an unexpected error (type=Not Found, status=404).
No message available
 

основной класс шлюза java

 @SpringBootApplication
@EnableEurekaClient
public class GatewayApplication {
 

Комментарии:

1. Согласно вашему сообщению, шлюз отправляет запрос на локальный хост:8086/api/v0. Шлюз по умолчанию не изменяет запрос. Вам нужно изменить путь. Фильтр stripPrefix 1 должен работать

2. спасибо за ваш ответ, но он не работает маршруты: — идентификатор: pr-api-идентификатор uri: локальный хост:8086 предикаты: — Путь=/api/** фильтры: — stripPrefix=1

Ответ №1:

Я, наконец, решил свою проблему, добавив конфигурацию cors в свой конфигурационный файл.

 spring:
   cloud:
          gateway:
      default-filters:
        - DedupeResponseHeader=Access-Control-Allow-Origin
      globalcors:
        cors-configurations:
          "[/**]":
            allowCredentials: true
            allowedOrigins: "*"
            allowedHeaders: "Origin, X-Requested-With, Content-Type, Accept, Content-Length, TOKEN, Authorization"
            allowedMethods: "GET, POST, PATCH, PUT, DELETE, OPTIONS"
            maxAge: 3628800