由于redis来做session的统一管理插件,如果多个项目使用同一个redis来管理session的话,那么session很有可能会出现冲突。
下图:默认session在redis中的key值是spring:session:sessions:sessionId,如果多个项目中出现了相同的sessionId的情况下就会在redis中出现key值被覆盖
那么解决方案就很简单:
方案一、springmvc配置方案
applicationContext.xml文件中增加配置
<property name="redisNamespace" value="business"></property>
<!-- spring redis session配置-->
<bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<!-- 由于business、sales共用同一个redis,所以此处需要修改session的key,使其不和其他工程冲突 -->
<property name="redisNamespace" value="business"></property>
<property name="defaultRedisSerializer" ref="redisJdkSerializer" />
<!-- sesson 过期时间-->
<property name="maxInactiveIntervalInSeconds" value="1800"/>
<property name="cookieSerializer" ref="defaultCookieSerializer"/>
</bean>
方案二、springboot配置方案
配置文件配置方式:yml或properties
spring.session.redis.namespace=xxx.xxx.xxx.test
启动类配置
@EnableRedisHttpSession(redisNamespace = “xxx.xxx.xxx.test”,maxInactiveIntervalInSeconds=600)
选择配置方式就不要再用注解方式,@EnableRedisHttpSession优先级高于配置文件的方式,会导致配置不生效。