# springboot-tomcat-session-redis
**Repository Path**: nonoSword/springboot-tomcat-session-redis
## Basic Information
- **Project Name**: springboot-tomcat-session-redis
- **Description**: springboot-tomcat-session-redis
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-08-17
- **Last Updated**: 2022-08-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SpringBoot-tomcat-session-redis
一个SpringBoot-starter小工具,修改自[tomcat-redis-session-manager](https://github.com/jcoleman/tomcat-redis-session-manager)使其适配SpringBoot2.0+(Tomcat8.5+)。
## Future
1. 将SpringBoot内嵌tomcat的session存储至redis。
2. 与SpringSession通过Filter实现不同,该项目通过配置内嵌tomcat的Manager的方式来修改session存储位置。
## 依赖
1. 环境:你的应用需要依赖web和redis的starter
```xml
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-redis
```
2. 配置:你的应用需要redis相关配置
```properties
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
# 以及其他redis相关配置
```
## 使用方法
1. 引用starter依赖:
```xml
io.github.terloo
embedded-tomcat-session-redis-boot-starter
0.0.2
```
2. 或者复制src至自己的项目中自行修改
## 配置项
1. 全局开关,默认为true
```properties
server.servlet.session.redis.enable=true
```
2. 生成redis键值的规则,默认采用tomcat的session键值生成规则,示例中修改为uuid
```java
import io.github.terloo.springboot.tomcat.session.redis.RedisSessionKeyGenerator;
import io.github.terloo.springboot.tomcat.session.redis.RedisSessionManager;
@Component
public class MyGenerator implements RedisSessionKeyGenerator {
@Override
public String generateKey(RedisSessionManager redisSessionManager, String requestedSessionId) {
return UUID.randomUUID().toString();
}
}
```
3. 持久化策略
```properties
server.servlet.session.redis.strategy=onChange,afterRequest
```
1. default:默认策略,只在识别到session改变时(**见注意事项**),在请求结束后进行持久化。
2. onChange:只要进行了set、delelte操作,立即持久化
3. afterRequest:每次请求结束后都进行持久化
> onChange和afterRequest策略可以同时存在,存在任一时default策略将会失效
4. 手动脏跟踪
```properties
server.servlet.session.redis.dirty-tracking.enable=true
server.servlet.session.redis.dirty-tracking.flag=dirtyFlag # 脏跟踪标识,默认为__changed__
```
启用后可以使用以下代码手动进行session持久化
```java
session.setAttribute("dirtyFlag", null);
```
## 注意事项
1. 由于判断对象是否相等使用equals,导致如果隐式修改一个session,session将不会被识别为已改变,如下
```java
List myArray = session.getAttribute("myArray");
myArray.add(additionalArrayValue);
```