我有grails应用程序,使用sessionRegistry我可以获得sessionId。
现在,如何从该sessionId获取HttpSession。
答案 0 :(得分:0)
如果你想要HttpSession
那么这个怎么样:
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)
}
}
一旦你把它放到src / groovy中,它应该在你的Spring上下文中自动可用。注入控制器或服务后,您可以像这样使用它。
sessionTracker.getSessionById('sessionId')
答案 1 :(得分:-1)
试试这个:
def sessions = ContextListener.instance().getSessions()
def sessionToInvalidate = sessions.find{it.id == sessionId}
更新:
正如Burt Beckwith所说,ContextListener
不是标准类。但是,它很容易实现。您可以在应用信息grails插件 here