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

OSCHINA-MIRROR/dromara-sa-token

 / Детали:

[ОШИБКА] Использование одного sessionId в нескольких потоках для входа может привести к потере данных входа.

Предстоит сделать
Владелец
Создано  
21.04.2025

Используемая версия:

Последняя версия 1.41.0

Вовлеченные модули:

Модуль входа

Шаги тестирования:

  • Я прошел следующие шаги для тестирования:
    Тестирование одновременного входа с одним sessionId при использовании нескольких потоков
  • Получены следующие результаты:
    При входе происходит серьезное отсутствие свойства terminalList объекта SaSession, 100% воспроизводимость
  • В частности, строка кода номер xx не соответствует описанию в документации:
    Строка 1343 класса StpLogic
  • Мое понимание:
    Проверка условия if(session == null && isCreate) имеет проблемы, так как при одновременном входе нескольких потоков (с одним sessionId) это условие всегда истинно, что приводит к созданию нескольких объектов SaSession. В результате только некоторые токены становятся действительными, а длина terminalList также неверна (при 10 параллельных входах, длина terminalList обычно составляет 1, а не 10). Я попытался добавить ключевое слово synchronized в метод getSessionBySessionId, что позволило корректно заполнять terminalList, но значение historyTerminalCount все еще неверное, так как тип int не может обрабатывать конкуренцию. Поэтому добавление ключевого слова synchronized в метод login может временно решить эту проблему.

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

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/dromara-sa-token.git
git@api.gitlife.ru:oschina-mirror/dromara-sa-token.git
oschina-mirror
dromara-sa-token
dromara-sa-token