因为多台服务器负载均衡,在获取客户端的sessionId的时候,会出现第一次和第二次不一样,因为负载均衡的缘故,你的服务器最少两台,那么客户端连接第一次请求和第二次请求如果不是同一台服务器的时候那么sessionId就会变,为了解决这个问题,我想到了session共享,如果两台服务器的session都存在redis上,那就不会有问题了
第一步pom文件引入jia包
<!--redis配置开始-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<!--redis配置结束-->
第二部配置文件配置redis
spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.pool.max-active=20
spring.redis.pool.min-idle=20
第三步设置redissession配置
package com.hisun.framework;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.ConfigureRedisAction;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
//用户session的生效时间是使用的这个单位是秒
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 7 * 24 * 3600)
public class RedisSessionConfig {
@Bean
public ConfigureRedisAction configureRedisAction() {
//如果是自己搭建的redis或者阿里云redis此处可以没有,因为开发了redis的config命令,但是亚马逊的redis是不开发config命令的,必须要此段代码
return ConfigureRedisAction.NO_OP;
}
}
这三部配置好就实现了session共享
测试截图
测试controller代码
package com.hisun.test.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.hisun.framework.controller.CommonController;
@RestController
@RequestMapping("/${sys.name}")
public class RoomController extends CommonController {
@RequestMapping(value = "/web/testsession", method = RequestMethod.GET)
public String testsession(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
String sss = session.getId();
return sss;
}
}
来源:oschina
链接:https://my.oschina.net/u/1858920/blog/2056336