final-session 一个轻量级分布式session框架,它可以无限水平扩展你的集群。
轻巧、易于配置、低入侵是 final-session
的设计理念,她轻盈而美。
支持redis、数据库存储会话session,推荐使用redis存储方案。通过自定义生成不同集群ID,读写访问不同的redis集群,从而实现节点无限扩展,架构图如下:
<dependency>
<groupId>top.lingkang</groupId>
<artifactId>final-session</artifactId>
<version>4.1.0</version>
</dependency>
注意,springboot3.0+ 版本内嵌的tomcat是javaEE9+,应该使用下面的依赖
<!--springboot 3.0 + 版本使用 或 javaEE 9+版本 -->
<dependency>
<groupId>top.lingkang</groupId>
<artifactId>final-session-jakarta</artifactId>
<version>4.1.0</version>
</dependency>
solon:https://gitee.com/lingkang_top/final-session/tree/master/final-session-solon
<!-- solon 2.5.x + -->
<dependency>
<groupId>top.lingkang</groupId>
<artifactId>final-session-solon</artifactId>
<version>4.1.0</version>
</dependency>
已经上传maven
公共仓库,可直接引用:https://repo1.maven.org/maven2/top/lingkang/final-session
继承FinalSessionConfigurerAdapter
类进行配置。
@Order(-1995)
@Component
public class WebSessionConfig extends FinalSessionFilter {
@Override
protected void configurer(FinalSessionConfig config) {
// 对项目进行配置
}
}
提示:必须在所有过滤器的前
默认为cookie
存储,名称为fs
,会话id
生成规则是UUID
,可以定制
@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<HttpServletRequest>() {
@Override
public String generateId(HttpServletRequest request, FinalSessionConfig config) {
// 自定义id的值,可以根据不同id前缀访问不同redis集群,从而实现集群无限扩展
return UUID.randomUUID().toString();
}
});
}
}
当我们使用 单体应用+前后端分离
时,为识别当前会话是否登录,
我们可以实现 FinalSessionId
接口让id标识同时从请求头、请求参数、cookie
中获取session id
。
@Configuration
@Order(-1995)
public class WebSessionConfig extends FinalSessionFilter {
@Override
protected void configurer(FinalSessionConfig config) {
// 自定义ID的获取、设置方式
properties.setSessionHandler(new FinalSessionHandler<HttpServletRequest, HttpServletResponse>() {
@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
}
});
}
}
通过存储于db
、nosql
中,实现分布式会话存储。
final-session准备了许多可扩展接口,你可以尽情发挥你的创新想法!
有问题issues
、PR
,也可以邮箱:ling-kang@qq.com
也能打赏支持我:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型