SpringBoot集成springsession利用redis来实现session共享
一、前言
1.场景:
当我们项目应用搭建了集群,就会产生session共享问题。因为session是保存在服务器上面的。
2.解决方案:
a.通过nginx的负载均衡其中一种ip绑定来实现(通过ip绑定服务器其中一台,就没有集群概念了); b.通过cookie备份session实现(因为cookie数据保存在客户端,所以不安全); c.通过redis备份session实现(可靠);
二、通过SpringBoot集成springsession利用redis来实现session共享 注意:在此之前你要搭建redis服务端 1.在spring boot的文档中,告诉我们添加@EnableRedisHttpSession来开启spring session支持,配置如下:
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}
2.而@EnableRedisHttpSession这个注解是由spring-session-data-redis提供的,所以在pom.xml文件中添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
3.属性文件配置分为两种 a. application.properties属性文件配置:
#redis配置 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redis.port=6379 #Redis密码 spring.redis.password=redis密码 # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0 #springboot内置tomcat的端口设置 server.port=8080
b. application.yml属性文件配置:
server:
port: 8080
spring:
redis:
host: localhost
password: 123
port: 6379
pool:
max-idle: 100
min-idle: 1
max-active: 1000
max-wait: -1
4.测试Controllter代码,注意:记得相关对象要 implements Serializable要不会报错!
@Controller
public class HelloController {
/***
* session共享测试
*
* @param request
* @return
*/
@RequestMapping("/testSessionId")
@ResponseBody
public Map<String, Object> testSessionId(HttpServletRequest request){
Map<String, Object> sessionIdMap = new HashMap<String, Object>();
//获取sessionId
String strSessionId = request.getSession().getId();
int iPort = request.getServerPort();
sessionIdMap.put("服务器端口:", iPort);
sessionIdMap.put("sessionId:", strSessionId);
return sessionIdMap ;
}
}
5.测试8080服务器返回结果:
{"sessionId:":"fbb6d066-4275-4909-8c3f-eb2111ca6cc4","服务器端口:":8080}
6.测试8081服务器返回结果:
{"sessionId:":"fbb6d066-4275-4909-8c3f-eb2111ca6cc4","服务器端口:":8081}
