Первое включение одновременной поддержки управления сеансом заключается в добавлении следующего слушателя в web.xml
:
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
После истечения времени ожидания сеанса, если пользователь отправляет запрос с просроченным идентификатором сеанса, они будут перенаправлены на настраиваемый URL-адрес.
Аналогично, если пользователь отправляет запрос с идентификатором сеанса, срок действия которого не истек, но совершенно недействителен, он также будет перенаправлен на настраиваемый URL-адрес: security.xml
<session-management invalid-session-url="/sessionexpiredPage.htm" session-authentication-error-url="/forms/common/login.jsp?error=alreadyLoggedin" session-fixation-protection="none" >
<concurrency-control expired-url="/sessionexpiredPage.htm" max-sessions="5" error-if-maximum-exceeded="true" />
</session-management>
Соответствующий код Java:
@Audit(option = "Session Expire", action = "Session Expired")
@RequestMapping(value = "/sessionexpiredPage.htm")
public ModelAndView sessionExpired(HttpSession session, HttpServletRequest request) {
clLogger.logMethodEntry("sessionexpiredPage");
ModelAndView model = new ModelAndView();
String userId = (String) session.getAttribute("USER_ID");
if(userId == null) {
model.setViewName("sessionexpiredPage");
}else {
model.setViewName("getHomePage");
}
clLogger.logMethodExit("sessionexpiredPage");
return model;
}