Как я могу использовать свою собственную реализацию ExpiringSession в Spring Session? - PullRequest
0 голосов
/ 29 октября 2018

Я использую Spring Boot и Spring Session и пытаюсь реализовать следующую политику в отношении пользовательских сессий:

  1. Пользователь выходит из системы, если неактивен более 1 часа
  2. Пользователь выходит из системы, если закрывает браузер
  3. Пользователь выходит из системы, если он активен более 12 часов

Я знаю, что могу достичь # 1, установив server.session.timeout в 1 час. Я знаю, что могу достичь # 2, установив server.session.cookie.max-age в -1 (по умолчанию). Исключая # 2, я могу достичь # 3, также установив server.session.cookie.max-age на 12 часов. Тем не менее, я не вижу способа, чтобы оба # 2 и # 3 изначально были вместе с Spring Session.

Рассматривая реализацию Spring Session, мне кажется, что я мог бы заставить это работать, если бы мог получить вывод ExpiringSession#isExpired, возвращающий true, если либо now - maxInactiveInterval > lastAccessedTime (по умолчанию), либо now - maxActiveInterval >= creationTime.

Однако я не вижу способа предоставить собственную реализацию или оболочку для ExpiringSession без создания собственной SessionRepository. Это было бы довольно просто, но я хотел бы иметь возможность полагаться на гибкость конфигурации, уже обеспеченную автоконфигурацией Spring Boot для Spring Session, и просто предоставлять свое собственное поведение.

То, что я пытаюсь сделать, необычно, или мой подход не звучит? Я чувствую, что мне не хватает какой-то технической причины, по которой мы бы не хотели применять такой тип политики.

Спасибо.

...