2011-10-14 118 views

回答

15
WebRequest req = (WebRequest) RequestCycle.get().getRequest(); 
    HttpServletRequest httpReq = (HttpServletRequest) req.getContainerRequest(); 
    String clientAddress = httpReq.getRemoteHost(); 
+2

難道不該'httpReq.getRemoteAddr()'? –

+1

'getRemoteAddr()'將返回原始IP地址,而'getRemoteHost()'將返回已解析的地址名稱(如果沒有的話)。 – tetsuo

3

子類WebClientInfo提供一個公共的方法對保護WebClientInfo.getRemoteAddr()各位代表。然後創建一個方法來在定製的RequestCycle類中查詢該方法。在檢票1.3-1.4我已經通過繼承RequestCycle實現這一點,但1.5似乎事情是不同的:RequestCycle in Wicket 1.5

WebClientInfo具有查詢X-Forwarded-For erquest參數的優勢,如果你的服務器就會返回正確的IP地址位於使用XFF的代理/負載均衡器之後。

+0

如何在Wicket 6中獲得WebClientInfo的實例? – Artem

+0

@Artem查看org.apache.wicket.markup.html.pages.BrowserInfoPage中的代碼以獲取詳細信息 – mrak

2

使用檢票6和7,你可以做到以下幾點:

String remoteAddress = ((WebClientInfo)Session.get().getClientInfo()) 
         .getProperties() 
         .getRemoteAddress();