背景
我想实现本文中介绍的设计.
它可以通过下图总结:

- 客户端首先使用IDP进行身份验证(OpenID Connect/OAuth2)
- IDP返回访问令牌(不带用户信息的不透明令牌)
- 客户端通过API网关进行调用,使用Authorization标头中的访问令牌
- API网关使用访问令牌向IDP发出请求
- IDP验证访问令牌是否有效并以JSON格式返回用户信息
- API网关将用户信息存储在JWT中,并使用私钥对其进行签名.然后将JWT传递给下游服务,该服务使用公钥验证JWT
- 如果服务必须调用另一个服务来完成请求,它将通过JWT,该JWT用作请求的身份验证和授权
到目前为止我有什么
我完成了大部分工作:
- Spring云作为全球框架
- Spring启动以启动个人服务
- Netflix Zuul作为API网关
我还编写了一个Zuul PRE过滤器,用于检查访问令牌,联系IDP并创建JWT.然后将JWT添加到转发到下游服务的请求的标头中.
问题
现在我的问题非常具体针对Zuul及其过滤器.如果由于任何原因在API网关中验证失败,我怎样才能停止路由并直接用401响应而不继续过滤链并转发呼叫?
如果验证失败,过滤器将不会将JWT添加到标头,401将来自下游服务.我希望我的网关可以阻止这种不必要的通话.
我试着看看我怎么com.netflix.zuul.context.RequestContext用来做这个,但文档很差,我找不到办法.