5

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

class MyHttpSessionListener implements HttpSessionListener {

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

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

我怎样才能做到这一点?

4

3 回答 3

9

您可以访问 RequestContextHolder 并获取值

String ipAddr = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
           .getRequest().getRemoteAddr();
于 2010-08-30T01:10:38.940 回答
2

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

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

最好的办法是有一个 javax.servlet.Filter 来获取 IP 地址并将其设置为会话属性(如果不存在)。(如果不存在,您也可以进行日志记录)。

于 2010-08-30T01:01:38.187 回答
2

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

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

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

于 2011-10-13T10:27:23.613 回答