1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lingkang_top-final-session

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

final-session — это легковесная распределённая сессионная структура, которая позволяет бесконечно масштабировать ваш кластер.

final-session отличается лёгкостью, простотой настройки и низким уровнем вмешательства. Она изящна и красива.

core

Рекомендуется использовать хранилище на основе 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.

Конфигурация в Spring

Наследуйте класс FinalSessionConfigurerAdapter для настройки.

@Order(-1995)
@Component
public class WebSessionConfig extends FinalSessionFilter {
    @Override
    protected void configurer(FinalSessionConfig config) {
        // 对项目进行配置
    }
}

Примечание: должен быть установлен перед всеми фильтрами.

Другие инструкции по настройке

1. Имя сессии и идентификатор сессии

По умолчанию используется хранилище 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();
            }
        });
    }
}

2. Пользовательский способ получения идентификатора сессии (подходит для разделения передней и задней частей)

Когда мы используем монолитное приложение + разделение передней и задней части, чтобы определить, вошёл ли текущий сеанс, мы можем реализовать интерфейс 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
            }
        });
    }
}

3. Хранение сессии

Хранилище может быть реализовано в базе данных или NoSQL для обеспечения распределённого хранения сессии.

3.1 Хранилище в Redis

Распределённое хранение сессии: сессия хранится в Redis

Хранилище в базе данных

Распределённое хранение сессии: сессия хранится в базе данных

final-session предоставляет множество расширяемых интерфейсов, которые позволяют вам свободно выражать свои инновационные идеи!

Другое

Если у вас есть вопросы, проблемы или PR, вы также можете написать мне по электронной почте: ling-kang@qq.com. Также вы можете поддержать меня, сделав пожертвование:
pay

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления (3)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lingkang_top-final-session.git
git@api.gitlife.ru:oschina-mirror/lingkang_top-final-session.git
oschina-mirror
lingkang_top-final-session
lingkang_top-final-session
master