5

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

在内部和外部,我们使用 spring OAuth2 并且效果很好。

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

是否有人考虑过这一点,以及为 zuul 提供粘性会话支持的正确方法是什么。

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

4

1 回答 1

10

我假设如果您需要有多个后端的粘性会话,那么您必须使用功能区过滤器。粘性会话可以添加为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 发送)。

注意,如果您可以在后端使用 Spring Session,您将不需要粘性会话。

于 2015-03-25T10:20:02.867 回答