Spring Cloud中的Sticky Sessions和Zuul

时间:2015-03-23 18:49:10

标签: spring-security spring-cloud netflix-zuul

我有一组微服务,我们使用zuul从前端进行路由,作为使用spring cloud将uri上下文路径映射到特定微服务的方法。

我们在内部和外部使用spring OAuth2,效果非常好。

但是,对于一项特定服务,出现了对SAML的要求,这对该服务强加了粘性会话要求。

是否有人考虑过这个问题以及为zuul提供粘性会话支持的正确方法。

作为解决方法,直到我弄清楚这一点,我正在将前端的HAProxy请求直接路由到此服务。

1 个答案:

答案 0 :(得分:9)

我假设您需要具有多个后端的粘性会话,因此您必须使用功能区过滤器。粘性会话可以添加为IRule,例如

@RibbonClient(value="myui", configuration=UiRibbonConfiguration.class)
public class UiRibbonConfiguration {
  @Bean
  public IRule loadBalancerRule() {
    return new MyStickySessionRule();
  }
}

加上ZuulFilter(或后端的servlet Filter),它会添加一个用于关联的cookie - 每个后端实例必须唯一地标识自己,然后在MyStickySessionRule中查看传入的cookie以决定将请求发送到哪个实例(例如,如果后端是Spring Boot应用程序,您可以将“X-Application-Context”标头值作为cookie发送)。

N.B。如果您可以在后端使用Spring Session,则不需要粘性会话。