2010-08-29 19 views
5

在我的Grails應用程序,我已經實現了接口HttpSessionListener監聽會話創建下面給出:如何在創建會話時獲取IP地址?

class MyHttpSessionListener implements HttpSessionListener { 

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

現在,我想日誌負責會話創建的IP地址。

我該怎麼做?

回答

6

您可以訪問RequestContextHolder並獲得價值

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

非常感謝。它像一個魅力 – fabien7474 2010-08-30 14:56:13

+6

不妨說這是Spring框架的一部分。這些類不是JSF規範的一部分。 – Mindwin 2013-05-14 19:58:07

2

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

您可以從「ServletRequest.getRemoteAddr()」獲取並記錄IP地址,但您無權訪問HttpSessionListener或HttpSessionEvent的servlet請求。

最好的想法是擁有一個javax.servlet.Filter,它獲取IP地址並將其設置爲會話屬性(如果尚不存在)。 (你也可以做記錄,如果不存在的話)。

+0

感謝您的值設置爲會話中的提示,爲'HttpSession'是隻有'HttpSessionListener'中的可用實例。 – asgs 2014-08-25 16:19:22

2

您也可以使用這個接口在HttpSessionListener:像這樣requestInitialized():ServletRequestListener 您可以實現。

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

它那做工精細,請求對象可以爲您帶來的遠程ADRESS,有一種方法,這樣做