Как получить JSESSIONID из Contexts.getSession () во время preDestroyContext.SESSION? - PullRequest
1 голос
/ 18 ноября 2011

Работая с JBoss AS 5.1, JSF 1.2 и Seam 2.2, я пытаюсь регистрировать открытия и закрытия сеансов.

AFAIK, в момент события org.jboss.seam.preDestroyContext.SESSION, в случае тайм-аута сеанса, FacesContext, что кажется естественным, так как нет запущенного HTTP-запроса, поэтому я не могу получить из него идентификатор сеанса.Но все еще есть контекст сеанса Seam, который доступен Contexts.getSession().

Когда я динамически проверяю объект Contexts.getSession() в отладчике, я вижу JSESSIONID во внутреннем Map.Я хотел бы сделать что-то вроде:

String sessionId = Contexts.getSession().get("JSESSIONID");

Но, очевидно, JSESSIONID не является правильным ключом для получения идентификатора сеанса.Я безуспешно пытался id, SessionId.Метод SessionContext.getNames() возвращает список ключей:

  • anonPersistentPermissionResolver
  • loggedUserId
  • org.jboss.seam.security.ruleBasedPermissionResolver
  • org.jboss.seam.web.session
  • com.sun.faces.application.StateManagerImpl.SerialId
  • org.jboss.seam.international.timeZoneSelector
  • org.jboss.seam.international.localeSelector
  • org.jboss.seam.security.defaultResolverChain
  • org.jboss.seam.security.persistentPermissionResolver
  • javax.faces.request.charset
  • crumbs
  • org.jboss.seam.core.conversationEntries
  • debateId
  • org.jboss.seam.security.credentials
  • com.sun.faces.logicalViewMap
  • org.jboss.seam.security.identity
  • org.jboss.seam.security.rememberMe

Значение org.jboss.seam.web.session не содержит идентификатор сеанса.

Как получитьидентификатор сеанса от Contexts.getSession()?

1 Ответ

1 голос
/ 19 ноября 2011

Может быть, вы можете использовать классический HttpSessionListener для регистрации того, что вам нужно.Вставьте в ваш web.xml:

...
<listener>
    <listener-class>com.yourcompany.YourSessionListener</listener-class>
</listener>
...

Реализация слушателя выглядит так:

package com.yourcompany;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.log4j.Logger;

public class YourSessionListener implements HttpSessionListener {   

    private static Logger log = Logger.getLogger(YourSessionListener.class);

    public void sessionCreated(HttpSessionEvent event) {
        log.info("creating http session: " + event.getSession().getId());                       
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        log.info("destroying http session: " + event.getSession().getId());        
    }   
}
...