Как направить на внешний URL с помощью прокси-фильтра Zuul - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть внешний URL-адрес, и я хочу передать заголовок запроса через фильтр zuul для запуска приложения. Может кто-нибудь, пожалуйста, помогите мне в этом. В моем пользовательском префильтре я написал это:

 @Component
public class CustomFilters extends ZuulFilter {

    public static final Logger logger = LoggerFactory.getLogger(CustomFilters.class);


    @Override
    public String filterType() {
        return "route";
    }

    @Override
    public int filterOrder() {
        return 1;
    }

    @Override
    public boolean shouldFilter() {

        return true;
    }

    @Override
    public Object run() {
        logger.info("executing run ");
        RequestContext ctx = RequestContext.getCurrentContext();
        ctx.addZuulRequestHeader("x-forwarded-host", "<external url>");
        ctx.addZuulRequestHeader("x-forwarded-proto", "https");
        ctx.addZuulRequestHeader("x-forwarded-port", "8800");
        ctx.addZuulRequestHeader("key", "id);

        return null;
    }
}

app.properties:

ribbon.eureka.enabled=false
server.port=8080
zuul.routes.books.sensitive-headers=
zuul.routes.books.path = /books/
zuul.routes.books.url = <ext url>

Пример приложения: Это дает мне URL для отдыха, через который я перенаправляю на внешний URL, определенный выше в моем файле свойств.

public class SampleApplication {

    @RequestMapping(value = "/check")
      public String available() {
        return "available!";
      }

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

}

app.properties:

spring.application.name=book
server.port=8090

Снимок экрана

enter image description here

1 Ответ

0 голосов
/ 04 мая 2018
 zuul:
  routes:
    users:
      path: /myusers/**
      url: http://example.com/users_service

Эти простые URL-маршруты не выполняются как HystrixCommand и не балансируют нагрузку по нескольким URL-адресам с помощью ленты. Для достижения этих целей вы можете указать идентификатор службы со статическим списком серверов следующим образом:

zuul:
  routes:
    echo:
      path: /myusers/**
      serviceId: myusers-service
      stripPrefix: true

hystrix:
  command:
    myusers-service:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: ...

myusers-service:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    ListOfServers: http://example1.com,http://example2.com
    ConnectTimeout: 1000
    ReadTimeout: 3000
    MaxTotalHttpConnections: 500
    MaxConnectionsPerHost: 100

в вашем фильтре убедитесь, что этот фильтр должен появиться только для запроса с uri example1.com или example2.com, путем применения метода фильтрации

...