ZuulFilter не вызывается - PullRequest
1 голос
/ 11 марта 2019

Я использую:

  • spring-boot 2.1.2.RELEASE
  • весеннее облако Гринвич. РЕЛИЗ

Зуул зависимость:

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul'

Я вызываю микросервис из другого, используя zuul и шаблон с балансировкой нагрузки:

restTemplate.postForEntity("http://image/api/image", imageDto, ImageDto.class)

Запрос достигает нисходящего сервиса, но заголовок Authorization (я пробовал с разными) не устанавливается в ZullFilter:

public class ZuulAuthFilter extends ZuulFilter {

    public static final String AUTHORIZATION_HEADER = "Authorization";

    public String filterType() {
        return PRE_TYPE;
    }

    public int filterOrder() {
        return PRE_DECORATION_FILTER_ORDER - 1;
    }

    public boolean shouldFilter() {
        return true;
    }

    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        String authorizationValue = ctx.getRequest().getHeaders(AUTHORIZATION_HEADER).nextElement();
        ctx.addZuulRequestHeader(AUTHORIZATION_HEADER, authorizationValue);
        return null;
    }
} 

Я также создал фильтр @Bean:

@Bean
public ZuulAuthFilter zuulAuthFilter() {
    return new ZuulAuthFilter();
}

Вот моя конфигурация zuul:

zuul:
  sensitiveHeaders: Cookie,Set-Cookie
  ribbon:
    eager-load:
      enabled: true

Похоже, что фильтр вообще не вызывается. Я добавил System.exit(0) к каждому переопределенному методу фильтрации, и приложение все еще работает.

Я аннотировал класс приложения с помощью @EnableZuulProxy

Что мне не хватает? Почему фильтр не может быть вызван? Должен ли он вообще вызываться в моем случае?

1 Ответ

1 голос
/ 11 марта 2019

Я вызываю микросервис из другого, используя прокси zuul.

Согласно источникам кажется, что фильтры Zuul вызываются из ZuulServlet.Spring Cloud ZuulController только оболочки ZuulServlet .Поэтому нет способа вызвать цепочку фильтров Zuul перед вызовом restTemplate из коробки.А Zuul не предназначен для внутренней микросервисной связи.

...