# final-session **Repository Path**: lingkang_top/final-session ## Basic Information - **Project Name**: final-session - **Description**: final-session 一个轻量级分布式session框架,它可以无限水平扩展你的集群,使集群会话变得简单。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 3 - **Created**: 2022-01-26 - **Last Updated**: 2024-12-23 ## Categories & Tags **Categories**: webframework **Tags**: None ## README # final-session **final-session** 一个轻量级分布式session框架,它可以无限水平扩展你的集群。 轻巧、易于配置、低入侵是 `final-session` 的设计理念,她轻盈而美。 ![core](https://gitee.com/lingkang_top/final-session/raw/master/document/core.png)

> 支持redis、数据库存储会话session,推荐使用redis存储方案。通过自定义生成不同集群ID,读写访问不同的redis集群,从而实现节点无限扩展,架构图如下: ![集群架构图](https://gitee.com/lingkang_top/final-session/raw/master/document/%E9%9B%86%E7%BE%A4%E6%9E%B6%E6%9E%84.png) ## 依赖 ```xml top.lingkang final-session 4.1.0 ``` `注意,springboot3.0+ 版本内嵌的tomcat是javaEE9+,应该使用下面的依赖` ```xml top.lingkang final-session-jakarta 4.1.0 ``` solon:[https://gitee.com/lingkang_top/final-session/tree/master/final-session-solon](https://gitee.com/lingkang_top/final-session/tree/master/final-session-solon) ```xml top.lingkang final-session-solon 4.1.0 ``` 已经上传`maven`公共仓库,可直接引用:[https://repo1.maven.org/maven2/top/lingkang/final-session](https://repo1.maven.org/maven2/top/lingkang/final-session/) ## 在spring中配置 继承`FinalSessionConfigurerAdapter`类进行配置。
```java @Order(-1995) @Component public class WebSessionConfig extends FinalSessionFilter { @Override protected void configurer(FinalSessionConfig config) { // 对项目进行配置 } } ``` `提示:必须在所有过滤器的前`
## 其他配置说明 ### 1. 会话名称和会话ID 默认为`cookie`存储,名称为`fs`,会话`id`生成规则是`UUID`,可以定制 ```java @Configuration @Order(-1995) public class WebSessionConfig extends FinalSessionFilter { @Override protected void configurer(FinalSessionConfig config) { // 对项目进行配置 // 设置cookie的名称,默认session id存储在cookie中 config.setSessionName("token"); // 自定义session存活时长 单位:毫秒 config.setMaxValidTime(19951995L); // 配置id生成规则 config.setIdGenerate(new IdGenerate() { @Override public String generateId(HttpServletRequest request, FinalSessionConfig config) { // 自定义id的值,可以根据不同id前缀访问不同redis集群,从而实现集群无限扩展 return UUID.randomUUID().toString(); } }); } } ``` ### 2. 自定义会话ID的获取方式(适用前后端分离) 当我们使用 `单体应用+前后端分离` 时,为识别当前会话是否登录,
我们可以实现 `FinalSessionId` 接口让id标识同时从请求头、请求参数、`cookie`中获取`session id`。 ```java @Configuration @Order(-1995) public class WebSessionConfig extends FinalSessionFilter { @Override protected void configurer(FinalSessionConfig config) { // 自定义ID的获取、设置方式 properties.setSessionHandler(new FinalSessionHandler() { @Override public String getSessionId(HttpServletRequest request, String name) { // 获取会话id的方式,可以通过 请求头、请求参数、cookie中获取 // 从cookie中 // 从参数中 // 从请求头中 return request.getHeader("token");// 这只是一个demo } @Override public void setSessionId(HttpServletResponse response, String name, String value) { // 前后端分离,可以不设置session id到cookie } }); } } ``` ### 3. 会话的存储 通过存储于`db`、`nosql`中,实现分布式会话存储。 #### 3.1 存储于redis中 [集群共享会话:session存储于redis中](https://gitee.com/lingkang_top/final-session/blob/master/document/03.redis.md) #### 存储于数据库 [集群共享会话:session存储于数据库中](https://gitee.com/lingkang_top/final-session/blob/master/document/04.datesource.md) `final-session准备了许多可扩展接口,你可以尽情发挥你的创新想法!` ### 其他 有问题`issues`、`PR`,也可以邮箱:**ling-kang@qq.com**

也能打赏支持我:
![pay](https://gitee.com/lingkang_top/final-session/raw/master/document/pay.png)