使用Redis的Spring HttpSession不保存SESSION cookie值

时间:2016-11-18 14:09:13

标签: spring cookies redis netflix-zuul httpsession

我们正在使用Spring Cloud构建一个基于微服务的系统,我们使用Zuul作为边缘服务器和一些后端微服务。在其中一个后端服务中,我们使用Redis来管理HttpSession并存储一些与用户相关的对象。

直接访问微服务时一切都很顺利,但是当通过Zuul进行访问时出现问题,因为后备微服务总是获得一个新的HttpSession ID。我尝试使用JSESSIONID将带有SESSIONZuulFilter的cookie转发到微服务,但是微服务最终没有使用cookie值来创建Spring:在Redis中的会话。

任何人都可以帮助确定如何使Spring Session使用Cookie值而不是HttpSession.ID

我们正在使用:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Camden.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

2 个答案:

答案 0 :(得分:0)

我尝试了类似的东西。您可以在这里查看:https://github.com/khauser/microservices4vaadin

需要对DefaultCookieSerializer进行更改:

@Bean
public HttpSessionStrategy httpSessionStrategy() {
  CookieHttpSessionStrategy cookieHttpSessionStrategy = new CookieHttpSessionStrategy();
  DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
  cookieSerializer.setCookieName("JSESSIONID");
  cookieSerializer.setCookiePath("/");
  cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
  cookieHttpSessionStrategy.setCookieSerializer(cookieSerializer);
  return cookieHttpSessionStrategy;
}

答案 1 :(得分:0)

只需在application.properties中使用它,它将解决您的问题

zuul.sensitive-headers=