Как проверить перенаправленные маршруты с фильтрами маршрутов zuul в zuulProxy - PullRequest
0 голосов
/ 13 января 2020

Я перехожу по этой ссылке.

{ ссылка }

Мне не хватает этой части о том, как смоделировать фильтр, который я использовал для моего прокси-сервера zuul. .

Это мой журнал ошибок.

com.netflix.zuul.exception.ZuulException: Filter threw Exception
...
Caused by: .com.demo.example.exception.AccessTokenMissingException: No access token found in request headers.

У меня есть собственный предварительный фильтр для проверки заголовка авторизации.

public class PreRouteFilter extends ZuulFilter {

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

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

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {


            RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
            String header = request.getHeader("Authorization");

            // Check header if it contain AUTHORIZATION key and value starting with "Bearer "
            if (header == null || !header.startsWith("Bearer ")) {
                ctx.set("error.status_code", HttpServletResponse.SC_UNAUTHORIZED);
                throw new AccessTokenMissingException("No access token found in request headers.");
            }

        return null;
    }
}

Я добавил свой фильтр через эту конфигурацию.

@Configuration
public class FilterConfig {

    @Bean
    public PreRouteFilter routeFilter() {
        return new PreRouteFilter();
    }
}

1 Ответ

0 голосов
/ 14 января 2020

в вашем тесте вам нужно создать запрос и добавить заголовок для авторизации на основе маркеров Bearer. как-то так: 1. создать RequestContext, -

RequestContext context = new RequestContext();

создать запрос MockHttpServletRequest и добавить к нему заголовок Auth.
 MockHttpServletRequest httpRequest = new MockHttpServletRequest();
 httpRequest.setMethod("GET");
 String authHeader = "Bearer " + "your sample token string";
 httpRequest.addHeader("Authorization", authHeader);
 httpRequest.setRequestURI("/<whateverURI>");
установить запрос Http в контексте,
context.setRequest(httpRequest);
Установить этот контекст как текущий тестовый контекст,
RequestContext.testSetCurrentContext(context);
Теперь вы можете запустить фильтр,
yourFilter.run();
...