获取Grails的IP地址

时间:2012-03-07 21:33:02

标签: grails ip-address

我知道有类似的问题已被提出,但是前一段时间都已经提出了问题,所以我将开始一个新的主题。

我正在尝试使用以下方法获取grails中的IP地址:

def String ipAddress ;

ipAddress = request.getHeader("Client-IP")

if (ipAddress == "")
request.getHeader("X-Forwarded-For")

if (ipAddress == "")
request.getRemoteAddr() 

如果我单独使用任何请求方法,它可以正常工作,但是第二次访问请求方法时,我得到一个Java hashmap错误,例如:

if this map contains a mapping from a key
* {@code k} to a value {@code v} such that {@code (key==null ? k==null :
* key.equals(k))}, then this method returns {@code v}; otherwise
* it returns {@code null}.  (There can be at most one such mapping.)

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

Marius,我对你的代码做了一些小改动,把它放在一个控制器动作中并得到输出:

null
null
0:0:0:0:0:0:0:1

代码:

        def ipAddress = request.getHeader("Client-IP")
        log.info ipAddress
        if (!ipAddress)
            log.info request.getHeader("X-Forwarded-For")

        if (!ipAddress)
            log.info request.remoteAddr

我希望这些变化是自我解释的吗?

答案 1 :(得分:0)

我想将代码更新到下一个:

def ipAddress = request.getHeader("Client-IP")
    log.info ipAddress
    if (!ipAddress){
        ipAddress=request.getHeader("X-Forwarded-For")
        log.info "Used X-Forwarded-For header: $ipAddress"
    }
    if (!ipAddress){
        ipAddress=request.remoteAddr
        log.info "Used RemoteAddr attribute: $ipAddress"
    }

否则最后一个条件将导致不正确的行为。