同步操作将从 凌康/final-session 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
final-session 一个轻量级分布式session框架,它可以无限水平扩展你的集群,使集群会话变得简单。
轻巧、易于配置、低入侵是 final-session
的设计理念,轻盈而美。
支持redis、数据库存储会话session,推荐使用redis存储方案。通过自定义生成不同集群ID,读写访问不同的redis集群,从而实现节点无限扩展,架构图如下:
demo展示
直接从gitee下载最新jar包:https://gitee.com/lingkang_top/final-session/releases
拉取代码,使用maven打包
mvn clean package
得到项目核心包:final-session-core/target/final-session-core-1.0.0.jar
将final-session-core-1.0.0.jar
引入项目
例如Maven中:
<dependency>
<groupId>top.lingkang</groupId>
<artifactId>final-session-core</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/final-session-core-1.0.0.jar</systemPath>
</dependency>
继承FinalSessionConfigurerAdapter
类进行配置。
在spring中配置:(必须在所有拦截器的前面)
@Order(-19951219)
@Component
public class MyFinalSessionConfig extends FinalSessionConfigurerAdapter {
@Override
protected void configurer(FinalSessionProperties properties) {
// 对项目进行配置
}
}
在传统 Servlet 3.1+ 配置
public class MyFinalSessionConfig extends FinalSessionConfigurerAdapter {
@Override
protected void configurer(FinalSessionProperties properties) {
// 对项目进行配置
}
}
然后在web.xml中配置:(必须在所有拦截器的前面)
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>top.lingkang.exampleservlet.config.MyFinalSessionConfig</filter-class>
</filter>
默认的cookie为fs,会话ID为UUID,可以定制
@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中,实现分布式会话存储。
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置
@Autowired
private RedisTemplate redisTemplate;
@Override
protected void configurer(FinalSessionProperties properties) {
// 默认会话存储于内存中,下面将会话存储于redis中,需要引入RedisTemplate依赖
properties.setRepository(new FinalRedisRepository(redisTemplate));
}
若想在可视化工具看到key,可自行反序列化
目前支持了mysql(表名必须fs_session
),你可以自行扩展FinalRepository
接口,以支持其他数据库。
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;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
忽略了数据库连接等,配置如下
@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
也能打赏我:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。