2011-06-29 98 views
1

我需要爲每個請求記錄用戶ip ady's到我們的JBoss Netty服務器。我想:JBoss Netty獲取用戶IP(Http請求)

MessageEvent e; 
e.getChannel().getRemoteAddress(); 

是正確的答案,但總是返回127.0.0.1,我需要實際的客戶端IP。來自Rails我檢查了他們如何從文檔中找到ip:

確定始發IP地址。 REMOTE_ADDR是標準配置,但如果用戶位於代理之後, 會失敗。 HTTP_CLIENT_IP和/或 HTTP_X_FORWARDED_FOR由 代理設置,因此請檢查這些是否爲 REMOTE_ADDR是代理。 HTTP_X_FORWARDED_FOR在多個 鏈式代理的情況下可能是逗號分隔列表;最後一個不信任的地址 是發起IP的 。

所以我應該檢查在Netty中的所有標題還是有一個更簡單的方法?

回答

3

好的我有答案。使用ChannelHandlerContext而不是MessageEvent可以做到這一點。

SocketAddress remoteAddress = ctx.getChannel().getRemoteAddress();