NetflixOSS Zuul过滤器用于拒绝请求

Tho*_*kle 16 netflix spring-cloud netflix-zuul

我试图在一个简单的spring-cloud-Netflix Api网关(反向代理)中使用ZuulFilter,以便对自定义身份验证提供程序(通过Rest调用)验证请求.

过滤器应拒绝使用401的未授权请求,并且不要将这些请求进一步传递给代理服务.

这对ZuulFilter来说甚至可能吗?我没有在Zuuls api中找到文档,示例或其他内容.

有什么建议?

abe*_*amp 23

我得到了这个工作,采取了一些挖掘.确保您的请求尚未缓存.只需从ZuulFilter中的run()方法调用此方法即可.

/**
 * 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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Bru*_*uce 6

我使用pre过滤器来检查请求的身份验证,如果请求未授权,则返回401并且不再调用后端服务。我在函数中这样做run()是这样的:

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

ctx.unset()告诉上下文停止这个请求,并将ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());http代码设置为401

另请参阅Netflix Zuul - 阻止请求路由

  • 执行 ctx.unset() 会使 Zuul 抛出异常。只需 ctx.setSendZuulResponse(false); 对我有用。 (2认同)