如何在PlayFramework2中获取用户的IP?

i.a*_*iel 4 nginx playframework-2.0

出于安全原因,有时需要通过IP阻止用户.就我而言,我想在(SQL)数据库中管理IP黑名单.我想我可以根据Action Composition处理过滤器部分,但为此我需要用户的IP.

那么,我怎样才能获得用户的IP?

PS:应用程序在nginx代理后面运行.

for*_*ker 9

如果你玩!app是nginx(或任何其他反向代理)的后面,request.remoteAddress()只会返回你的nginx主机的IP地址.为了检索客户端的真实IP,您应该在nginx的proxy_pass配置中具有以下内容:

location / {
  proxy_pass        http://play-app:9000;
  proxy_set_header  X-Real-IP  $remote_addr;
}
Run Code Online (Sandbox Code Playgroud)

这会将客户端IP作为参数添加到标头中

doc:Nginx

然后在你的游戏中!应用程序,你会像这样检索它:

request.headers.get("X-Real-IP") //In Java
request.headers.get("X-Real-IP") //In Scala
Run Code Online (Sandbox Code Playgroud)

doc:Java,Scala


YoT*_*YoT 7

现在可以使用Play 2.0.2 +:RequestHeader.remoteAddress()

Java:

String ip = request().remoteAddress();
Run Code Online (Sandbox Code Playgroud)

斯卡拉:

Action { request =>
    val ip = request.remoteAddress()
}
Run Code Online (Sandbox Code Playgroud)