i.am.michiel
i.am.michiel

Reputation: 10404

How can you get a user's IP in PlayFramework2 ?

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.

Upvotes: 4

Views: 2539

Answers (2)

forker
forker

Reputation: 2679

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

Upvotes: 9

YoT
YoT

Reputation: 188

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

Java :

String ip = request().remoteAddress();

Scala :

Action { request =>
    val ip = request.remoteAddress()
}

Upvotes: 7

Related Questions