spring cloud-用于拒绝请求的NetflixOSS Zuul过滤器



我正试图在一个简单的春季云Netflix Api网关(反向代理)中使用ZuulFilter,以便根据自定义身份验证提供商(通过Rest调用)对请求进行身份验证。

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

这对ZuulFilter来说可能吗?我在Zuuls-api中找不到文档、示例或其他内容。

有什么建议吗?

我完成了这项工作,进行了一些挖掘。请确保您的请求尚未缓存。只需从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);
    }
}

我使用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-阻止请求路由

如果您想在Spring Cloud中使用身份验证,请尝试Spring Security Cloud项目。

最新更新