final-session — это легковесная распределённая сессионная структура, которая позволяет бесконечно масштабировать ваш кластер.
final-session отличается лёгкостью, простотой настройки и низким уровнем вмешательства. Она изящна и красива.
Рекомендуется использовать хранилище на основе Redis для сессий final-session, поддерживающего как Redis, так и базы данных. Можно настроить различные идентификаторы кластера и читать и записывать данные в разные кластеры Redis, что позволяет бесконечно расширять узлы и обеспечивает следующую архитектуру:
<dependency>
<groupId>top.lingkang</groupId>
<artifactId>final-session</artifactId>
<version>4.1.0</version>
</dependency>
Обратите внимание, что встроенный Tomcat в Spring Boot 3.0+ является Java EE 9+, поэтому рекомендуется использовать следующую зависимость:
<!--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. Идентификатор сессии генерируется с использованием 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, чтобы идентификаторы сеансов могли быть получены из заголовков запросов, параметров запроса и файлов cookie.
@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
}
});
}
}
Хранилище может быть реализовано в базе данных или NoSQL для обеспечения распределённого хранения сессии.
Распределённое хранение сессии: сессия хранится в Redis
Распределённое хранение сессии: сессия хранится в базе данных
final-session предоставляет множество расширяемых интерфейсов, которые позволяют вам свободно выражать свои инновационные идеи!
Если у вас есть вопросы, проблемы или PR, вы также можете написать мне по электронной почте: ling-kang@qq.com.
Также вы можете поддержать меня, сделав пожертвование:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )