Spring Cloud微服务系统登录一直重定向问题

场景:

        应产品要求,在原有spring cloud构建的微服务基础上,需要依据原有Manager微服务再搭建一个Manager微服务作为管理系统测试系统。因此,同一套微服务中Manager和Test-Manager拥有两套登录机制。

        考虑可以使用同一个zuul路由不同的服务名Manager和Test-Manager使用一个微服务实现两套系统。

出现的问题:

   1、登录测试系统页面报错,重定向次数太多?

        原因:需要在zuul的过滤器中添加新增服务的过滤条件,否侧login请求被过滤会一直重定向。

    2、可以进入登录页面,但是访问index时返回302?

        原因:查看在zuul过滤器中是否可以收到前端Cookie信息,如果没有,需要检查zuul配置是否将请求头信息滤掉。

         默认情况下,Spring Cloud Zuul在请求路由时,会滤掉HTTP请求头信息中的一些敏感信息,防止他们被传递到下游的外部服务器,默认敏感信息通过zuul.sensitiveHeaders参数定义,包括Cookie,Set-Cookie,Autorization三个属性。所以,我们在开发Web项目时常用的Cookie信息在Spring Cloud Zuul网关默认是不会传递的,因此导致我们登录无法鉴权。解决这个问题方法如下:

    ●通过设置全局参数为空来覆盖默认值:

扫描二维码关注公众号,回复: 2794504 查看本文章
zuul.sensitiveHeaders="*"

这种方法并不推荐,虽然可以实现Cookie的传递,但是破坏了默认设置的用意。在微服务架的API网关中,对于无状态的RESTful API请求肯定是要多余这些WEB类应用请求的,甚至还有一些架构设计会将Web类应用和App客户端一样都归为API网关之外的客户端应用。

●通过设置全局参数为空来覆盖默认值:

    #方法一:对于指定路由开启自定义敏感头

zuul.routes.<router>.customeSensitiveHeaders=true

  #方法二:将指定路由敏感头 甚至为空

zuul.routes.<router>.sensitiveHeaders=

注:其中<router>为自己指定服务路由名称

比较推荐这两种方法,仅对指定WEB应用开启敏感信息传递,影响范围小,不至于引起其他服务信息泄露问题。


猜你喜欢

转载自blog.csdn.net/sinat_30802291/article/details/80995782