Вопросы по настройке сеанса Spring Boot

У меня есть приложение Spring Boot, и я не могу заставить сеанс входа в систему длиться очень долго. Я устанавливаю следующее в application.properties:

spring.session.timeout = 180d
server.servlet.session.timeout = 180d

У меня есть пара вопросов:

• Какие суффиксы длительности допустимы при указании spring.session.timeout и server.servlet.session.timeout? Я нигде не могу найти это задокументировано, просто примечание в этих docs говорят: «Если суффикс длительности не указан, используются секунды», подразумевая, что возможны другие длительности.

• Нужно ли мне включать spring-session в мою POM? Меня не волнует кластеризация сеансов или поддержка API REST с отслеживанием состояния, и я хочу избежать дополнительного времени запуска и настройки. Я, конечно, не хочу настраивать больше постоянства.

Моей главной задачей является сохранение моего входа на веб-сайт (в идеале на неопределенный срок).

Я использую Spring Boot 2.3.0-RELEASE.


person Rick    schedule 25.05.2020    source источник
comment
Какую версию Spring Boot вы используете?   -  person Eleftheria Stein-Kousathana    schedule 02.06.2020


Ответы (2)


Если вы не используете Spring Session, вам следует использовать свойство server.servlet.session.timeout.

При указании тайм-аута у вас есть 3 варианта.

  • Вы можете использовать стандартный формат ISO-8601 используется java.time.Duratio, например P180D на 180 дней.

  • Вы можете использовать простой формат, в котором значение и единица измерения связаны, например, 180d для 180 дней. Вы можете найти поддерживаемые единицы в этот раздел справочной документации по Spring Boot.

  • Наконец, вы можете использовать представление long, и указанное число будет интерпретироваться как секунда, например 200 для 200 секунд.

Вам не нужно включать spring-session в свой POM.

person Eleftheria Stein-Kousathana    schedule 04.06.2020

В весенней загрузке 2.4+. Это может работать в приведенной ниже версии, но я не проверял это.

Я использую приведенную ниже конфигурацию. max-age устанавливает максимальный возраст в файле cookie на стороне браузера, а timeout устанавливает время ожидания в столбце MAX_INACTIVE_INTERVAL в spring_session, который я храню в JDBC.

Когда я использую только максимальный возраст, мой файл cookie удаляется из серверной базы данных через 30 минут. Когда я использую единственный тайм-аут, файл cookie удаляется из браузера при перезапуске браузера. Поэтому я установил максимальный возраст на 30 дней, чтобы сохранить сеанс в браузере, и тайм-аут на 30 дней, чтобы сохранить сеанс в БД.

server:
  servlet:
    session:
      cookie:
        max-age: 30d
      timeout: 30d

Мой build.gradle для oauth выглядит так

    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // for oauth
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    implementation 'org.springframework.boot:spring-boot-starter-security'

    // to store session in jdbc
    implementation "org.springframework.session:spring-session-jdbc"

Полезная ссылка

person royatirek    schedule 24.04.2021