我们正在使用Spring Boot v2.0.4 + Spring Cloud(Finchley版本)。
我们已经在各自独立的应用程序/进程中部署了Zuul,Auth Server,Eureka和Config Server。我们已经部署了六个自己的服务。我们正在对所有服务使用OAuth2身份验证。我们正在对所有应用程序使用嵌入式underwow容器。
当Zuul使用嵌入式Undertow容器时,我们无法登录-即使凭据正确,登录页面也会重新显示。当Zuul切换为使用嵌入式Tomcat容器时,一切正常运行-登录将用户带到正确的页面。 (两种情况下,所有其他应用程序都使用Undertow。)
当我们调试来自Zuul的Tomcat与Undertow的请求时,我们看到为Tomcat设置了SPRING_SECURITY_CONTEXT会话属性,但未为Undertow设置。我认为这意味着用户将被重定向回登录页面,这就是我们看到这种行为的原因。
我们知道Zuul + Tomcat vs. Undertow是一个问题,因为所有其他应用程序的配置都完全相同。
有什么想法吗?我们真的为这个问题scratch之以鼻。
答案 0 :(得分:0)
原来,这是由Zuul和Auth Server之间的JSESSIONID cookie名称冲突引起的。因为对于同名的多个Set-Cookie,Tomcat容器的处理方式与Wildfly不同(这违反了RFC6265),所以我们现在才看到它。
我应该提到我们将身份验证服务器配置为在Zuul代理之后,因此配置了多个JSESSIONID cookie。
我们现在通过在所有后端服务器上重命名JSESSIONID cookie名称来解决此问题。我们将研究可能的最佳方法,以便将来进行生产部署,方法可能是使用Spring Session。欢迎任何建议。