Фильтр NetflixOSS Zuul для отклонения запросов

Я пытаюсь использовать ZuulFilter в простом spring-cloud-Netflix Api gateway (обратный прокси) для аутентификации запросов против пользовательского поставщика аутентификации (через вызов Rest).

фильтр должен отклонять несанкционированные запросы с 401 и не передавать эти запросы дальше вниз к проксированным службам.

Это вообще возможно для ZuulFilter? Я не нашел документацию, пример или что-то в zuuls api.

какие предложения?

3 ответов


Я получил это на работу, взял некоторые раскопки. Убедитесь, что ваш запрос не кэшируется. Просто вызовите этот метод из метода run () внутри вашего ZuulFilter.

/**
 * Reports an error message given a response body and code.
 * 
 * @param body
 * @param code
 */
private void setFailedRequest(String body, int code) {
    log.debug("Reporting error ({}): {}", code, body);
    RequestContext ctx = RequestContext.getCurrentContext();
    ctx.setResponseStatusCode(code);
    if (ctx.getResponseBody() == null) {
        ctx.setResponseBody(body);
        ctx.setSendZuulResponse(false);
    }
}

Если вы хотите использовать аутентификацию с Spring Cloud, попробуйте Spring Security Cloud.


Я использую pre фильтр для проверки подлинности запроса, и если запрос не авторизован, то я вернусь 401 и больше не вызывайте службу back end. Я делаю это такой:

RequestContext ctx = getCurrentContext();
// do something to check the authentication
if(auth failed){
  ctx.unset();
  ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}

ctx.unset() скажите контексту, чтобы остановить этот запрос, и ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value()); установите код http в 401

см. Также Netflix Zuul - блок маршрутизации запросов