Spring Cloud中的Sticky Sessions和Zuul

Evi*_*us1 5 spring-security spring-cloud netflix-zuul

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

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

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

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

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

Dav*_*yer 10

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

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

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

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

  • 如果有人感兴趣,我使用@ DaveSyer的建议实现了一个关于粘性会话的IRule:https://github.com/alejandro-du/vaadin-microservices-demo/blob/master/proxy-server/src/main/java/ COM /示例/ StickySessionRule.java (10认同)