2016-05-26 3 views
0

J'ai l'application grails, en utilisant sessionRegistry Je peux obtenir sessionId.Comment obtenir HttpSession from sessionId dans l'application grails

Maintenant, comment puis-je obtenir HttpSession à partir de cet sessionId.

+1

Par 'sessionFactory', vous voulez parler de Hibernate SessionFactory? Cela n'a rien à voir avec les sessions HTTP, les noms sont simplement similaires par coïncidence. Le concept de «session» est utilisé à divers endroits, par ex. JMS et autres. Ils ne sont pas liés et ne partagent pas les identifiants. –

Répondre

-1

Essayez ceci:

def sessions = ContextListener.instance().getSessions() 
def sessionToInvalidate = sessions.find{it.id == sessionId} 

Mise à jour: comme mentionné Burt Beckwith, ContextListener n'est pas classe standart. Cependant, il est facile à mettre en œuvre. Vous pouvez voir comment il est mis en œuvre dans App Plugin Info Grailshere

+0

'ContextListener' n'est pas une classe standard, il doit s'agir de quelque chose que vous utilisez dans une application enregistrée dans web.xml en tant qu'écouteur pour garder une trace des sessions. Sans cette source de classe, cette réponse n'est pas utile du tout. –

0

Si vous voulez que le HttpSession alors que diriez-vous:

import org.springframework.beans.BeansException 
import org.springframework.context.ApplicationContext 
import org.springframework.context.ApplicationContextAware 
import org.springframework.stereotype.Component 
import org.springframework.web.context.WebApplicationContext 

import javax.servlet.http.HttpSession 
import javax.servlet.http.HttpSessionEvent 
import javax.servlet.http.HttpSessionListener 
import java.util.concurrent.ConcurrentHashMap 
import java.util.concurrent.ConcurrentMap 

@Component 
class SessionTracker implements HttpSessionListener, ApplicationContextAware { 

    private static final ConcurrentMap<String, HttpSession> sessions = new ConcurrentHashMap<String, HttpSession>(); 

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
     def servletContext = ((WebApplicationContext) applicationContext).getServletContext() 
     servletContext.addListener(this); 
    } 

    void sessionCreated(HttpSessionEvent httpSessionEvent) { 
     sessions.putAt(httpSessionEvent.session.id, httpSessionEvent.session) 
    } 

    void sessionDestroyed(HttpSessionEvent httpSessionEvent) { 
     sessions.remove(httpSessionEvent.session.id) 
    } 

    HttpSession getSessionById(id) { 
     sessions.get(id) 
    } 
} 

Une fois que vous déposez ceci dans src/groovy il devrait être automatiquement disponible dans votre Contexte de printemps. Vous pouvez l'utiliser comme cela après l'injection dans un contrôleur ou un service.

sessionTracker.getSessionById('sessionId')