我知道有类似的问题已被提出,但是前一段时间都已经提出了问题,所以我将开始一个新的主题。
我正在尝试使用以下方法获取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.)
任何建议都将不胜感激。
答案 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"
}
否则最后一个条件将导致不正确的行为。