Фильтр 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