Я пытаюсь регистрировать сообщение всякий раз, когда уничтожается HTTP-сессия. Я использую Весенняя ботинок, весенняя безопасность и Tomcat 8 (встроенный) в этом веб-приложении.Метод HttpSessionListener.sessionDestroyed() вызывается дважды во время таймаута сеанса
В течение таймаута сеанса sessionDestroyed() метод получает вызванное 2 раза, поэтому мое сообщение регистрируется дважды.
Я проверил идентификатор сеанса и идентификатор сеанса SAME во время обоих вызовов.
Это как мой код выглядит ...
import org.springframework.security.core.session.SessionRegistry;
...
@Component
public class MySessionListener implements javax.servlet.http.HttpSessionListener, ApplicationContextAware {
@Autowired(required = false)
SessionRegistry sessionRegistry;
и sessionDestroyed() ниже.
@Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
SecurityContextImpl springSecurityContext = (SecurityContextImpl)session.getAttribute("SPRING_SECURITY_CONTEXT");
if(springSecurityContext!=null){
Authentication authentication = springSecurityContext.getAuthentication();
LdapUserDetails userDetails = (LdapUserDetailsImpl)authentication.getPrincipal();
WebAuthenticationDetails WebAuthenticationDetails = (WebAuthenticationDetails)authentication.getDetails();
String userIp = WebAuthenticationDetails.getRemoteAddress();
Log.info(userDetails.getUsername(),userIp,timestamp,"timeout or logout","session destroyed");
}
sessionRegistry.removeSessionInformation(se.getSession().getId());
logger.info("Due to timeout/logout Session is Destroyed : Session ID is..." + session.getId());
}
Любая помощь будет оценена ...
Примечание: я заметил, этот вопрос был дефект в Tomcat 5, я не думаю, что дефект еще нефиксированной в Tomcat 8.
Ссылка: https://bz.apache.org/bugzilla/show_bug.cgi?id=25600