首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于拒绝请求的NetflixOSS Zuul过滤器

用于拒绝请求的NetflixOSS Zuul过滤器
EN

Stack Overflow用户
提问于 2015-06-28 19:41:23
回答 3查看 12.9K关注 0票数 18

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

筛选器应该拒绝带有401的未经授权的请求,并且不将这些请求进一步传递到代理服务。

对于ZuulFilter来说,这是可能的吗?我在Zuuls api中找不到文档、示例或其他东西。

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-10 04:50:15

我把这个弄好了,花了点功夫。确保您的请求尚未缓存。只需从ZuulFilter内部的run()方法调用此方法即可。

代码语言:javascript
复制
/**
 * 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);
    }
}
票数 26
EN

Stack Overflow用户

发布于 2017-05-04 09:55:43

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

代码语言:javascript
复制
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 - block request routing

票数 4
EN

Stack Overflow用户

发布于 2015-06-29 02:01:21

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31099368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档