Spring-Session-data-redis redis session 共享
参考:
分布式Session(Spring-session-data-redis)
SpringBoot+Spring Session+Redis实现Session共享及踩坑记录
Spring-session+Redis解决Session共享
Spring Session + Redis 实现 Session 共享,附带 Nginx 集群
27、使用Redis实现Session共享
pom 中依赖
开发中遇到的问题,验证码拿不到,经测试,是google浏览器的问题,其他人都可以登录,我换个浏览器就实现 session共享了
27、使用Redis实现Session共享
平台环境:
名称 |
版本号 |
Mac OS X |
10.15.1 |
JDK |
1.8.0_201 |
Apache Maven |
3.6.0 |
IntelliJ IDEA |
2019.2.4 (Ultimate Edition) |
Spring Boot |
2.1.10.RELEASE |
Redis |
stable 5.0.6 (bottled), HEAD |
Spring Session
Spring Session 提供了一套创建和管理Servlet HttpSession的方案。Spring Session提供了集群 Session(Clustered Sessions)功能,默认采用外置的Redis来存储Session数据,以此来解决Session共享的问题。
注意:Spring Session的核心项目并不依赖于Spring框架,因此,我们甚至能够将其应用于不使用 Spring 框架的项目中。
pom.xml中引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
application.properties中配置Redis
# REDIS
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1
spring.redis.lettuce.shutdown-timeout=100
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
# 应用访问端口
#server.port=9090
新建配置类SessionConfig
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30) // 3600*24*30=30天
public class SessionConfig
{
}
maxInactiveIntervalInSeconds: 设置Session失效时间,使用Redis Session之后,原Spring Boot中的server.session.timeout属性不再生效。
到此配置完成
接下来写一个RestController类测试下
package com.example.demo.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@RestController
public class UserController
{
@RequestMapping(value = "/setSession")
public Map<String, Object> setSession(HttpServletRequest request)
{
Map<String, Object> map = new HashMap<>();
request.getSession().setAttribute("message", request.getRequestURL());
map.put("request Url", request.getRequestURL());
return map;
}
@RequestMapping(value = "/getSession")
public Object getSession(HttpServletRequest request)
{
Map<String, Object> map = new HashMap<>();
map.put("sessionId", request.getSession().getId());
map.put("message", request.getSession().getAttribute("message"));
return map;
}
}
启动工程,开始测试:
访问:http://localhost:8080/getSession
{"sessionId":"0e860b83-1785-49ce-bed5-aa61692e732a","message":null}
说明现在还没有session信息
访问:http://localhost:8080/setSession
{"request Url":"http://localhost:8080/setSession"}
保存session信息
访问:http://localhost:8080/getSession
{"sessionId":"0e860b83-1785-49ce-bed5-aa61692e732a","message":"http://localhost:8080/setSession"}
成功获取session信息
现在把整个工程项目复制一份,重命名为springBootDemo27-1
把新项目中的端口配置项的注释放开
# 应用访问端口
server.port=9090
打开“终端”
cd springBootDemo27-1目录下
执行打包命令
mvn clean package -Dmaven.test.skip=true
cd到target目录下,执行
java -jar demo-0.0.1-SNAPSHOT.jar
访问:http://localhost:9090/getSession
{"sessionId":"0e860b83-1785-49ce-bed5-aa61692e732a","message":"http://localhost:8080/setSession"}
说明新复制出来的springBootDemo27-1工程也获取到了session信息。
测试完毕
回到“终端”退出springBootDemo27-1工程
control+C
源码下载:
https://github.com/qtdywp/codelabx-springboot/tree/master/springBootDemo27
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
2021-12-07 list 拆分 按个数