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