如何在创建会话时获取IP地址?

时间:2010-08-29 23:58:17

标签: java grails servlets httpsession

在我的 grails 应用程序中,我已经实现了接口HttpSessionListener来监听会话创建,如下所示:

class MyHttpSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        log.info "***************** Session created: id= ${event.getSession()?.id}"
    }
}

现在,我想记录负责会话创建的IP地址

我该怎么做?

3 个答案:

答案 0 :(得分:8)

您可以访问RequestContextHolder并获取值

String ipAddr = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
           .getRequest().getRemoteAddr();

答案 1 :(得分:2)

据我所知,你不能使用HttpSessionListener接口。

您可以从“ServletRequest.getRemoteAddr()”获取并记录IP地址,但您无权访问来自HttpSessionListener或HttpSessionEvent的servlet请求。

最好的想法是拥有一个获取IP地址的javax.servlet.Filter,并将其设置为会话属性(如果尚未存在)。 (如果还没有记录,你也可以进行记录。)

答案 2 :(得分:2)

您也可以在HttpSessionListener中使用此接口:ServletRequestListener 您可以像这样实现:requestInitialized()。

@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
    this.request = (HttpServletRequest) servletRequestEvent.getServletRequest();
}

它运行正常,请求对象可以为您带来远程地址,有一个方法可以做到这一点