在我的 grails 应用程序中,我已经实现了接口HttpSessionListener
来监听会话创建,如下所示:
class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
log.info "***************** Session created: id= ${event.getSession()?.id}"
}
}
现在,我想记录负责会话创建的IP地址。
我该怎么做?
答案 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();
}
它运行正常,请求对象可以为您带来远程地址,有一个方法可以做到这一点