How can you get a user's IP in PlayFramework2

2019-02-18 06:14发布

For security reasons, sometimes it is needed to block users by IP. In my case, I would like to manage the IP blacklist in a (SQL) database. I guess I can handle the filter part based on Action Composition but for that I need the user's IP.

So, how can I get the user's IP?

PS : The application is running behind a nginx proxy.

2条回答
成全新的幸福
2楼-- · 2019-02-18 06:39

If your Play! app is behind nginx (or any other reverse proxy), request.remoteAddress() will only return the IP address of your nginx host. In order to retrieve the real IP of the client you should have the following in your proxy_pass configuration of nginx:

location / {
  proxy_pass        http://play-app:9000;
  proxy_set_header  X-Real-IP  $remote_addr;
}

This will add the client IP as parameter to the header

doc: Nginx

And then within your Play! app you would retrieve it like this:

request.headers.get("X-Real-IP") //In Java
request.headers.get("X-Real-IP") //In Scala

doc: Java, Scala

查看更多
淡お忘
3楼-- · 2019-02-18 06:51

It's now possible with Play 2.0.2+ : RequestHeader.remoteAddress()

Java :

String ip = request().remoteAddress();

Scala :

Action { request =>
    val ip = request.remoteAddress()
}
查看更多
登录 后发表回答