2011-06-29 72 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();