2011-10-14 39 views

Trả lời

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

nên không phải là được 'httpReq.getRemoteAddr()'? –

+1

'getRemoteAddr()' sẽ trả về địa chỉ IP thô, trong khi 'getRemoteHost()' sẽ trả về tên địa chỉ được giải quyết nếu có thể (hoặc IP nếu không). – tetsuo

3

Subclass WebClientInfo để cung cấp một phương pháp nào mà các đại biểu về bảo vệ WebClientInfo.getRemoteAddr(). Sau đó, tạo một phương thức để truy vấn điều này trong một lớp tùy chỉnh RequestCycle. Trong Wicket 1,3-1,4 tôi đã đạt được điều này bằng cách subclassing RequestCycle, nhưng với 1,5 có vẻ như mọi thứ đã khác: RequestCycle in Wicket 1.5

WebClientInfo có lợi thế là truy vấn tham số erquest X-Forwarded-For, và sẽ trả về địa chỉ IP thích hợp nếu máy chủ của bạn là đằng sau bộ cân bằng tải/proxy sử dụng XFF.

+0

Làm thế nào để có được một thể hiện của WebClientInfo trong Wicket 6? – Artem

+0

@Artem Xem mã trong org.apache.wicket.markup.html.pages.BrowserInfoPage để biết thông tin chi tiết – mrak

2

Sử dụng Wicket 6 và 7, bạn có thể làm như sau:

String remoteAddress = ((WebClientInfo)Session.get().getClientInfo()) 
         .getProperties() 
         .getRemoteAddress(); 
Các vấn đề liên quan