如何在preDestroyContext.SESSION期间从Contexts.getSession()获取JSESSIONID?

问题描述 投票:1回答:1

使用JBoss AS 5.1,JSF 1.2和Seam 2.2,我正在尝试记录会话开放和关闭。

AFAIK,在org.jboss.seam.preDestroyContext.SESSION事件的那一刻,在会话超时的情况下,没有FacesContext看起来很自然,因为没有正在运行的HTTP请求,所以我无法从中获取会话ID。但是Contexts.getSession()仍然提供Seam会话上下文。

当我在调试器中动态检查Contexts.getSession()对象时,我可以在一些内部JSESSIONID中看到Map。我想做的事情如下:

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

但显然,JSESSIONID不是检索会话ID的正确密钥。我尝试了idSessionId没有成功。 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的值不包含会话ID。

如何从Contexts.getSession()获取会话ID?

jsf seam
1个回答
1
投票

也许你可以使用经典的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());        
    }   
}
© www.soinside.com 2019 - 2024. All rights reserved.