Servlets 从HttpSessionEvent获取IP地址
我正在使用JavaEE,并且有一个Servlets 从HttpSessionEvent获取IP地址,servlets,listener,ip-address,httpsession,Servlets,Listener,Ip Address,Httpsession,我正在使用JavaEE,并且有一个HttpSessionListener实现,我试图在客户端创建会话时使用它来获取IP地址。我该怎么做 我的webapp是2.4(恐怕无法更改): 如何获取给定HttpSessionEvent的IP地址?这是通过标准Servlet API无法实现的。IP地址仅通过HttpServletRequest可用,而当手头只有HttpSession时,IP地址将不可用 一些(如果不是所有的话)基于servlet(MVC)的框架提供了将相关HTTP请求作为线程局部变量(TLS
HttpSessionListener
实现,我试图在客户端创建会话时使用它来获取IP地址。我该怎么做
我的webapp是2.4(恐怕无法更改):
如何获取给定
HttpSessionEvent
的IP地址?这是通过标准Servlet API无法实现的。IP地址仅通过HttpServletRequest
可用,而当手头只有HttpSession
时,IP地址将不可用
一些(如果不是所有的话)基于servlet(MVC)的框架提供了将相关HTTP请求作为线程局部变量(TLS)获取的可能性,如JSF、Grails、Spring等。如果您没有使用这样的框架,因此无法依赖其API,那么您需要自己开发TLS,如本答案所示,在sessionCreated()
中抓取它,如下所示:
HttpServletRequest request = YourContext.getCurrentInstance().getRequest();
// ...
或者,让servlet过滤器检查是否是新的,然后将IP地址复制到其中
if (session.isNew()) {
session.setAttribute("ip", ip);
}
然后在sessionCreated()
中提取
请注意,这在
sessionDestroyed()
中是不可靠的,因为在sessionDestroyed()
期间不一定有HTTP请求的方式。另请参见@Sachin的副本:你在哪里读到OP正在使用Grails?我没有使用Grails,但我知道如何使用Google,并且已经看过了。
HttpServletRequest request = YourContext.getCurrentInstance().getRequest();
// ...
if (session.isNew()) {
session.setAttribute("ip", ip);
}
String ip = (String) event.getSession().getAttribute("ip");