# final-session **Repository Path**: iceman123/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**: 0 - **Forks**: 3 - **Created**: 2022-03-15 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **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) demo展示 ![集群架构图](https://gitee.com/lingkang_top/final-session/raw/master/document/demo1.jpg) ## 快速入门 ### 方式一: 直接从gitee下载最新jar包:https://gitee.com/lingkang_top/final-session/releases
### 方式二: 拉取代码,使用maven打包 ```shell mvn clean package ``` 得到项目核心包:`final-session-core/target/final-session-core-1.0.0.jar`
将`final-session-core-1.0.0.jar`引入项目 例如Maven中: ```xml top.lingkang final-session-core 1.0.0 system ${project.basedir}/lib/final-session-core-1.0.0.jar ``` ## 配置 ### 使用配置 继承`FinalSessionConfigurerAdapter`类进行配置。
在spring中配置:`(必须在所有拦截器的前面)` ```java @Order(-19951219) @Component public class MyFinalSessionConfig extends FinalSessionConfigurerAdapter { @Override protected void configurer(FinalSessionProperties properties) { // 对项目进行配置 } } ``` 在传统 Servlet 3.1+ 配置 ```java public class MyFinalSessionConfig extends FinalSessionConfigurerAdapter { @Override protected void configurer(FinalSessionProperties properties) { // 对项目进行配置 } } ``` 然后在web.xml中配置:`(必须在所有拦截器的前面)` ```xml sessionFilter /* sessionFilter top.lingkang.exampleservlet.config.MyFinalSessionConfig ``` ### 会话名称和会话ID 默认的cookie为fs,会话ID为UUID,可以定制 ```java @Override protected void configurer(FinalSessionProperties properties) { // 自定义会话时长 properties.setMaxValidTime(19951219L); // 自定义cookie名称 properties.setCookieName("lingkang"); // 配置id生成规则 properties.setIdGenerate(new IdGenerate() { @Override public String generateId(HttpServletRequest request) { // 自定义id的值,可以根据不同id前缀访问不同redis集群,从而实现集群无限扩展 return UUID.randomUUID().toString(); } }); // 更多配置 ... } ``` ### 会话的存储 通过存储于db、nosql中,实现分布式会话存储。 #### 存储于redis中 添加依赖 ```xmnl org.springframework.boot spring-boot-starter-data-redis ``` 配置 ```java @Autowired private RedisTemplate redisTemplate; @Override protected void configurer(FinalSessionProperties properties) { // 默认会话存储于内存中,下面将会话存储于redis中,需要引入RedisTemplate依赖 properties.setRepository(new FinalRedisRepository(redisTemplate)); } ``` `若想在可视化工具看到key,可自行反序列化` #### 存储于数据库 目前支持了mysql(`表名必须fs_session`),你可以自行扩展`FinalRepository`接口,以支持其他数据库。 ```sql CREATE TABLE `fs_session` ( `id` varchar(64) NOT NULL, `session` blob, `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` ```xml org.springframework.boot spring-boot-starter-data-jdbc ``` 忽略了数据库连接等,配置如下 ```java @Autowired private JdbcTemplate jdbcTemplate; @Override protected void configurer(FinalSessionProperties properties) { // 默认会话存储于内存中,下面将会话存储于mysql中,需要引入JdbcTemplate依赖 properties.setRepository(new FinalDataBaseRepository(jdbcTemplate)); } ``` 若默认方案不满意,可自行扩展`FinalRepository`接口进行自定义。final-session准备了许多可扩展接口,你可以尽情发挥你的idea。 ### 其他 有问题issues,也可以邮箱:**ling-kang@qq.com**

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