У меня есть класс:
@SessionScoped
public class LoggedUser {
private User user;
...
}
, который я использую для отслеживания входа пользователя в мое приложение.
В моем приложении Struts2 у меня есть Перехватчик, чтобы проверить, зарегистрирован ли пользователь, если он не перенаправлен на страницу входа.
public class LoggedUserInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 2822434409188961460L;
@Inject
private LoggedUser loggedUser;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
if(loggedUser==null || !loggedUser.isLogged()){
return "login";
}
return invocation.invoke();
}
}
Проблема возникает при превышении времени ожидания сеанса. Объект LoggdeUser никогда не является нулевым или удаленным. У меня всегда последний экземпляр.
Я добавил слушателя сессии.
public class SessionListener implements HttpSessionListener {
private static Logger logger = Logger.getLogger(SessionListener.class.getName());
@Override
public void sessionCreated(HttpSessionEvent event) {
logger.info("sessionCreated = " + event.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
logger.info("sessionDestroyed = " + event.getSession().getId());
}
}
Я вижу, что sessionDestroyed вызывается, но когда я снова вхожу в мой перехватчик ... LoggedUser никогда не воссоздается для нового сеанса.
почему?
Мой Struts2 Действие для входа в систему это
public class LoginUserAction extends ActionSupport implements ModelDriven<LoggedUser>, ServletRequestAware {
...
@Inject
private LoggedUser loggedUser;
public String execute() throws Exception {
...
loggerUser.setLoggedTime(now);
...
return SUCCESS;
}
Я тоже добавляю это в web.xml
session-config
session-timeout 2 /session-timeout
/session-config