2011-10-14 14 views

risposta

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

Non dovrebbe essere 'httpReq.getRemoteAddr()'? –

+1

'getRemoteAddr()' restituirà l'indirizzo IP non elaborato, mentre 'getRemoteHost()' restituirà il nome dell'indirizzo risolto se possibile (o l'IP se non lo è). – tetsuo

3

sottoclasse WebClientInfo per fornire un metodo pubblico che i delegati sulla protetto WebClientInfo.getRemoteAddr(). Quindi creare un metodo per interrogarlo in una classe personalizzata RequestCycle. In Wicket 1,3-1,4 Ho raggiunto questo sottoclasse RequestCycle, ma con 1.5 sembra che le cose sono diverse: RequestCycle in Wicket 1.5

WebClientInfo ha il vantaggio di interrogazione del parametro erquest X-Forwarded-For, e restituirà l'indirizzo IP corretto se il server è dietro un proxy/bilanciamento del carico che utilizza XFF.

+0

Come posso ottenere un'istanza di WebClientInfo in Wicket 6? – Artem

+0

@Artem Esaminare il codice in org.apache.wicket.markup.html.pages.BrowserInfoPage per informazioni dettagliate – mrak

2

Utilizzando Wicket 6 e 7, è possibile effettuare le seguenti operazioni:

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