extractClientIP
Description
Provides the value of X-Forwarded-For
, Remote-Address
, or X-Real-IP
headers as an instance of RemoteAddress
.
The akka-http server engine adds the Remote-Address
header to every request automatically if the respective setting akka.http.server.remote-address-header
is set to on
. Per default it is set to off
.
Example
- Scala
-
val route = extractClientIP { ip => complete("Client's ip is " + ip.toOption.map(_.getHostAddress).getOrElse("unknown")) } // tests: Get("/").withHeaders(`Remote-Address`(RemoteAddress(InetAddress.getByName("192.168.3.12")))) ~> route ~> check { responseAs[String] shouldEqual "Client's ip is 192.168.3.12" }
- Java
-
final Route route = extractClientIP(remoteAddr -> complete("Client's IP is " + remoteAddr.getAddress().map(InetAddress::getHostAddress) .orElseGet(() -> "unknown")) ); // tests: final String ip = "192.168.1.2"; final akka.http.javadsl.model.RemoteAddress remoteAddress = akka.http.javadsl.model.RemoteAddress.create(InetAddress.getByName(ip)); final HttpRequest request = HttpRequest.GET("/") .addHeader(RemoteAddress.create(remoteAddress)); // testRoute(route).run(request) .assertEntity("Client's IP is " + ip); testRoute(route).run(HttpRequest.GET("/")) .assertEntity("Client's IP is unknown");