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

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

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

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

Любые предложения?

Ответ 1

Я получил это, чтобы работать, взял некоторый рыть. Убедитесь, что ваш запрос уже не кэширован. Просто вызовите этот метод из вашего метода 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);
    }
}

Ответ 2

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

Ответ 3

Я использую фильтр pre для проверки подлинности запроса, и если доза запроса не авторизована, я возвращаю 401 и больше не звоню в службу поддержки. Я делаю это в функции run() следующим образом:

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 - маршрутизация запроса блока