Установка тайм-аута сеанса в Spring MVC
Есть ли способ указать время ожидания сеанса в Spring? Я не могу указать его в web.xml. Поскольку я использую область сеанса bean в контроллере следующим образом
Я сконфигурировал контроллер через spring xml файлы.
class xyzController{
ABCSessionScopeClass objectWhichWillBeStoredInSession;
}
Я не могу использовать это либо
session.setMaxInactiveInterval(60*60);
Есть ли другой способ сделать это. Я не против установки таймаута за сеанс или для всего сеанса одновременно.
Ответы
Ответ 1
Я не смог найти способ указать значение тайм-аута сеанса через любые файлы конфигурации Spring. Я использовал <aop:scoped-proxy>
bean, так что мне не нужно управлять значением чтения/записи/объектом для сеанса. Теперь я также хочу установить значение тайм-аута сеанса, не используя API сервлетов. Но, похоже, нет способа указать его, кроме файла web.xml. Таким образом, с помощью сервлета api request.getSession()
установите период ожидания. Я вытеснил значение времени, чтобы я мог легко изменить его, не перекомпилируя код. Если кто-нибудь найдет лучший подход, то, пожалуйста, не стесняйтесь публиковать сообщения. Если это будет лучше, я могу принять это как ответ.
Ответ 2
Решение с использованием Pure Spring MVC, sevlet context.xml
<mvc:interceptors>
<bean class="com.xxx.SessionHandler" />
</mvc:interceptors>
Адаптер манипулятора
@Component
public class SessionHandler extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.getSession().setMaxInactiveInterval(60*60);
return true;
}
}
Предполагая, что вы используете Spring безопасность,
Для каждого успешного входа я считаю, что лучший способ - создать LoginSuccessHandler
и указать обработчик успешности проверки подлинности для обычного входа, а также вспомнить меня.
@Service
public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(
HttpServletRequest request,
HttpServletResponse response,
Authentication authentication) throws ServletException, IOException {
request.getSession().setMaxInactiveInterval(60*60);
super.onAuthenticationSuccess(request, response, authentication);
}
}
<http auto-config="true" use-expressions="true">
<form-login login-page="/login"
authentication-failure-url="/login.hst?error=true"
**authentication-success-handler-ref="loginSucessHandler"** />
<logout invalidate-session="true" logout-success-url="/home" logout-url="/logout" />
<remember-me key="jbcp" **authentication-success-handler-ref="loginSucessHandler"**/>
<session-management>
<concurrency-control max-sessions="1" />
</session-management>
</http>