Spring gateway mapping к spring rest data

148
11 января 2020, 03:30

Создал Gateway сервис и сервис товаров, все конектится через eureka. вот зависимость для gateway

implementation 'org.springframework.cloud:spring-cloud-starter-gateway'

поднимаю все это в docker-compose,

version: '3.3'
services:
  eureka-service:
    image: fnasibov/eureka
    ports:
      - 8761:8761
    networks:
      - spring-cloud-network
  gateway-service:
    image: fnasibov/gateway
    ports:
      - 8860:8659
    networks:
      - spring-cloud-network
  product-service:
    image: fnasibov/product
    environment:
      DB_USER: "postgres"
      DB_PASSWORD: "postgres"
    depends_on:
      - eureka-service
    networks:
      - spring-cloud-network
  products-db:
    image: postgres
    restart: always
    ports:
      - 5432:5432
    volumes:
      - ./database:/var/lib/postgresql
    networks:
      - spring-cloud-network
networks:
  spring-cloud-network:
    driver: bridge

Проблема в том, что у сервиса товаров есть есть поддержка HATEOAS и он отдает не только инфу из бд но и доп ссылки

{
    "_links": {
        "products": {
            "href": "http://product-service/products{?page,size,sort}",
            "templated": true
        },
        "profile": {
            "href": "http://product-service/profile"
        }
    }
}

Но отдает он эти ссылки не правильные, у них base url идет имя контейнера, мне нужно что бы там была ссылка на gateway-service

https://srv003.cloud.gcomapps.ru:8860

как могу исправить этот момент? Или например сделать их относительными?

Config file spring gateway gateway

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: product-service
          predicates:
            - "Path=/products/**"
          filters:
            - StripPrefix=1
          uri: "http://product-service/products"
        - id: attribute-service
          predicates:
            - "Path=/attributes/**"
          filters:
            - StripPrefix=1
          uri: "http://attribute-service/attributes"
      forwarded:
        enabled: true
      x-forwarded:
        enabled: true
        for-enabled: true
        proto-enabled: true

так же пробовал отключать forwarded и x-forwarded

Answer 1

Нашел такой вариант, в HATEOAS сервисе, нужно включить поддержку X-FORWARD-* headers(Начиная со Spring Boot 2.* и Spring Fraemwork 5). Точнее добавить фильтр.

@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
    FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new ForwardedHeaderFilter());
    return bean;
}
READ ALSO
Java Reflect private method

Java Reflect private method

в другом классе делаю reflection

145
Ничего не отображается во Frame. Swing

Ничего не отображается во Frame. Swing

Переместите framesetVisible(true); в последнюю строку метода

180
Выбор типа DataSource

Выбор типа DataSource

Я хочу получить JSON с большим количеством данных и реализовать в приложении отображение этих данных с пагинациейСервер не принимает никаких...

177