diff --git a/akka-docs/rst/scala/http/routing-dsl/directives/misc-directives/extractClientIP.rst b/akka-docs/rst/scala/http/routing-dsl/directives/misc-directives/extractClientIP.rst index 02343bbf92..2afd187200 100644 --- a/akka-docs/rst/scala/http/routing-dsl/directives/misc-directives/extractClientIP.rst +++ b/akka-docs/rst/scala/http/routing-dsl/directives/misc-directives/extractClientIP.rst @@ -11,7 +11,7 @@ Signature Description ----------- -Provides the value of ``X-Forwarded-For``, ``Remote-Address``, or ``X-Real-IP`` headers as an instance of ``HttpIp``. +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``. diff --git a/akka-http-tests/src/test/java/akka/http/javadsl/server/directives/MiscDirectivesTest.java b/akka-http-tests/src/test/java/akka/http/javadsl/server/directives/MiscDirectivesTest.java index 91dd5a8399..ad802b20d3 100644 --- a/akka-http-tests/src/test/java/akka/http/javadsl/server/directives/MiscDirectivesTest.java +++ b/akka-http-tests/src/test/java/akka/http/javadsl/server/directives/MiscDirectivesTest.java @@ -72,7 +72,7 @@ public class MiscDirectivesTest extends JUnitRouteTest { route .run(HttpRequest.create()) - .assertStatusCode(StatusCodes.NOT_FOUND); + .assertStatusCode(StatusCodes.OK); } @Test diff --git a/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/MiscDirectivesSpec.scala b/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/MiscDirectivesSpec.scala index ed22f1feaf..9ea665975f 100644 --- a/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/MiscDirectivesSpec.scala +++ b/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/MiscDirectivesSpec.scala @@ -30,6 +30,11 @@ class MiscDirectivesSpec extends RoutingSpec { extractClientIP { echoComplete } } ~> check { responseAs[String] shouldEqual "1.2.3.4" } } + "extract unknown when no headers" in { + Get() ~> { + extractClientIP { echoComplete } + } ~> check { responseAs[String] shouldEqual "unknown" } + } } "the selectPreferredLanguage directive" should { diff --git a/akka-http/src/main/scala/akka/http/scaladsl/server/directives/MiscDirectives.scala b/akka-http/src/main/scala/akka/http/scaladsl/server/directives/MiscDirectives.scala index 9f70c1f116..3ab6f93d5f 100644 --- a/akka-http/src/main/scala/akka/http/scaladsl/server/directives/MiscDirectives.scala +++ b/akka-http/src/main/scala/akka/http/scaladsl/server/directives/MiscDirectives.scala @@ -104,7 +104,8 @@ object MiscDirectives extends MiscDirectives { private val _extractClientIP: Directive1[RemoteAddress] = headerValuePF { case `X-Forwarded-For`(Seq(address, _*)) ⇒ address } | headerValuePF { case `Remote-Address`(address) ⇒ address } | - headerValuePF { case `X-Real-Ip`(address) ⇒ address } + headerValuePF { case `X-Real-Ip`(address) ⇒ address } | + extract[RemoteAddress] { case _ ⇒ RemoteAddress.Unknown } private val _requestEntityEmpty: Directive0 = extract(_.request.entity.isKnownEmpty).flatMap(if (_) pass else reject)