返回 导航

SpringBoot / Cloud

hangge.com

API网关服务组件Spring Cloud Zuul使用详解5(路由详解5:Cookie与头信息、会话保持)

作者:hangge | 2020-10-15 08:10

七、Cookie 与头信息

1,问题描述

(1)默认情况下,Spring Cloud Zuul 在请求路由时,会过滤掉 HTTP 请求头信息中的一些敏感信息,防止它们被传递到下游的外部服务器。
默认的敏感头信息通过 zuul.add-host-header 参数定义, 包括 CookieSet-CookieAuthorization 三个属性。

(2)所以,我们在开发 Web 项目时常用的 cookie Spring Cloud Zuul 网关中默认是不会传递的,这就会引发一个常见的问题:如果我们要将使用了 Spring SecurityShiro 等安全框架构建的 Web 应用通过 Spring Cloud zuul 构建的网关来进行路由时,由于 cookie 信息无法传递,我们的 Web 应用将无法实现登录和鉴权。

(3)比如我们有一个项目使用了 Spring Security,虽然我们事先已经发送请求进行登录(通过 Zuul 网关):

(4)但访问其他接口是仍然会提示没有登录,这便是因为由于 cookie 信息无法传递造成的:

2,解决办法

(1)我们可以通过设置全局参数为空来覆盖默认值:
注意:这种方法并不推荐,虽然可以实现 Cookie 的传递,但是破坏了默认设置的用意。在微服务架构的 API 网关之内,对于无状态的 RESTful API 请求肯定是要远多于这些 Web 类应用请求的,基至还有一些架构设计会将 Web 类应用和 App 客户端一样都归为 API 网关之外的客户端应用。
zuul.sensitive-headers=

(2)我们也可以指定路由的参数来配置,方法有下面两种(这里以针对 feign-consumer 服务为例):
注意:推荐使用这两种方法,因为仅对指定的 Web 应用开启对敏感信息的传递,影响范围小,不至于引起其他服务的信息泄露问题。
# 方法一:对指完路由开启自定义敏感头
zuul.routes.feign-consumer.custom-sensitive-headers=true

# 方法二:将指定路由的敏感头设置为空
zuul.routes.feign-consumer.sensitive-headers=

(3)配置完并重启网关后,我们再次先通过网关发送登录请求,再调用其他接口,可以看到数据已经成功返回了:
评论

全部评论(0)

回到顶部