我们正在使用Spring Cloud构建一个基于微服务的系统,我们使用Zuul作为边缘服务器和一些后端微服务。在其中一个后端服务中,我们使用Redis来管理HttpSession
并存储一些与用户相关的对象。
直接访问微服务时一切都很顺利,但是当通过Zuul进行访问时出现问题,因为后备微服务总是获得一个新的HttpSession
ID。我尝试使用JSESSIONID
将带有SESSION
和ZuulFilter
的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>
答案 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=