如何在Grails控制器中获取客户端IP地址?

如何在Grails控制器中获取客户端IP地址?,grails,Grails,我在Ruby中有这样的代码: @clientipaddress = request.env["HTTP_CLIENT_IP"] if (@clientipaddress == nil) @clientipaddress = request.env["HTTP_X_FORWARDED_FOR"] end if (@clientipaddress == nil) @clientipaddress = request.env["REMOTE_ADDR"] end if (@clientipad

我在Ruby中有这样的代码:

@clientipaddress = request.env["HTTP_CLIENT_IP"]
if (@clientipaddress == nil)
  @clientipaddress = request.env["HTTP_X_FORWARDED_FOR"]
end
if (@clientipaddress == nil)
  @clientipaddress = request.env["REMOTE_ADDR"]
end
if (@clientipaddress != nil)
  comma = @clientipaddress.index(",")
  if (comma != nil && comma >= 0)
    @clientipaddress = @clientipaddress[0, comma]
  end
end
它考虑了IP可能出现的所有可能的方式。例如,在我的本地开发机器上,没有代理。但在QA和生产中,代理是存在的,有时它们提供不止一个地址


我不需要知道Groovy语法,只需要知道哪些方法可以让我获得与我请求上述IP的三种不同方式相同的效果。

我认为这应该是您想要的:

  • request.getRemoteAddr()
  • request.getHeader(“X-Forwarded-For”)
  • request.getHeader(“客户端IP”)

结果--ip请求0:0:0:0:0:0:0:1

我尝试了这个方法,但得到的结果是:“没有这样的属性:请求”在这个错误上花费了1小时,没有运气。有人知道如何解决这个问题吗?你是在控制器里做的吗?这是一个注入属性,应该存在。从代理服务器,X-Forwarded-For将为您提供正确的值。如何正确地从有效变量捕获IP?@IgniteCoders:这取决于您需要这些信息做什么。第一行给出接收请求的机器的IP地址,但可以是代理服务器。另外两种是不同的代理服务器用来告诉您请求最初来自哪台机器的方法(现在还有标准化的“转发”头,它有一个更复杂的forrmat)。通常,您会尝试不同的代理标头,只有当这些标头都不存在时,您才使用远程地址。如果您解释了您的答案,而不仅仅是转储一些代码,这将非常有用。
//action in controller 
def postentry (accountno) {
def fulldata = request.reader.text 
def remoteadd = request.getRemoteAddr()
println "ip request  "+remoteadd
...
}