用于拒绝请求的 NetflixOSS Zuul 过滤器
NetflixOSS Zuul Filter for rejecting requests
我正在尝试在简单的 spring-cloud-Netflix Api 网关(反向代理)中使用 ZuulFilter,以便对自定义身份验证提供程序的请求进行身份验证(通过 Rest 调用)。
过滤器应使用 401 拒绝未经授权的请求,并且不会将这些请求进一步传递给代理服务。
ZuulFilter 甚至可能吗?我没有在 Zuuls api 中找到文档、示例或其他内容。
有什么建议吗?
如果您想使用 Spring Cloud 的身份验证,请尝试 Spring Security Cloud 项目。
我让这个工作,进行了一些挖掘。确保您的请求尚未缓存。只需从 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);
}
}
我使用pre
过滤器来检查请求的身份验证,如果请求未被授权,那么我return 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 - block request routing
我正在尝试在简单的 spring-cloud-Netflix Api 网关(反向代理)中使用 ZuulFilter,以便对自定义身份验证提供程序的请求进行身份验证(通过 Rest 调用)。
过滤器应使用 401 拒绝未经授权的请求,并且不会将这些请求进一步传递给代理服务。
ZuulFilter 甚至可能吗?我没有在 Zuuls api 中找到文档、示例或其他内容。
有什么建议吗?
如果您想使用 Spring Cloud 的身份验证,请尝试 Spring Security Cloud 项目。
我让这个工作,进行了一些挖掘。确保您的请求尚未缓存。只需从 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);
}
}
我使用pre
过滤器来检查请求的身份验证,如果请求未被授权,那么我return 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 - block request routing