2016-07-29 5 views
2

Я использую сеансы Spring с Postgres. Сеансы сохраняются в моей базе данных Postgres, используя JdbcOperationsSessionRepository.Почему мои сеансы Spring продолжают удаляться из моего магазина JDBC?

По умолчанию неактивное время, которое я использую для своих сеансов, составляет 30 дней. Как только пользователь входит в систему, я делаю request.getSession().setMaxInactiveInterval() и меняю его на 180 дней.

Однако по некоторым причинам 180 дней не соблюдаются, и сеансы продолжают удаляться каждый час. Например:

Эта сессия длилась 180 дней, но он был удален, как только начался следующий час.

Кто-нибудь знает, как я могу остановить эти сеансы от удаления и заставить их придерживаться 180 дней?

Я угадываю, что this function имеет какое-то отношение к этому.

Вот часть моего приложения, который расширяет максимальный интервал бездействия пользователя:

private void setupSession(HttpServletRequest request, User user) { 
    HttpSession session = request.getSession(); 
    session.setMaxInactiveInterval(15552000); 
    session.setAttribute("user-id", user.id); 
} 
+0

Можете ли вы разместить свою конфигурацию? – codependent

+0

Если я хорошо понял ... вы хотите, чтобы у неработающих пользователей было время истечения сеанса 30 дней и зарегистрированных пользователей 180 дней? – codependent

+0

Оказывается, это ошибка в библиотеке: https://github.com/spring-projects/spring-session/issues/580 – RainSear

ответ

0

Как указано в комментариях, это проблема с интеграцией Spring Session JDBC, которые были сообщены в gh-580.

Чтобы обойти это, пока решение не будет доставлено, вы можете расширить JdbcOperationsSessionRepository и переопределить метод cleanUpExpiredSessions. После этого вам просто нужно переопределить компонент репозитория сеанса JDBC по умолчанию, предоставив свой компонент, который расширяет JdbcOperationsSessionRepository и называется sessionRepository (имя бина важно, так как оно должно соответствовать одному в JdbcHttpSessionConfiguration, чтобы переопределить его).

Например:

@EnableJdbcHttpSession 
class SessionConfig { 

    // omitted data source & tx manager config 

    @Bean 
    MyJdbcOperationsSessionRepository sessionRepository(...) { 
     return new ... 
    } 

} 

Вы можете найти решение для cleanUpExpiredSessions, изложенные в комментариях на gh-580.

 Смежные вопросы

  • Нет связанных вопросов^_^