gpt4 book ai didi

scala - 限制对 Play Framework (Scala) 中特定 IP 的访问

转载 作者:行者123 更新时间:2023-12-05 01:03:09 38 4
gpt4 key购买 nike

如何使用 Scala 限制对 Play Framework 中 IP 列表的访问?

我正在使用 Play 框架 2.2.4

我找到了 Java 的解决方案:
http://feadro.com/simple-ip-access-list-for-play-2-1-with-java/

我应该如何在 Scala 中做到这一点?

最佳答案

将要限制的 IP 粘贴到 application.conf 中。

myapp.ipwhitelist = ["192.168.1.1", ...]

然后创建一个 global filter 应用于每个传入请求,例如:
import scala.collection.JavaConverters._
import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.iteratee.Iteratee
import play.api.Play.current
import play.api.mvc._

object IPFilter extends EssentialFilter {
def apply(nextFilter: EssentialAction) = new EssentialAction {
def apply(requestHeader: RequestHeader) = {
// read the IPs as a Scala Seq (converting from the Java list)
val ips: Seq[String] = current.configuration.getStringList("myapp.ipwhitelist")
.map(_.asScala).getOrElse(Seq.empty)

// Check we've got an allowed IP, otherwise ignore the
// request body and immediately return a forbidden.
if (ips.contains(requestHeader.remoteAddress)) nextFilter(requestHeader)
else Iteratee.ignore[Array[Byte]]
.map(_ => Results.Forbidden(s"Bad IP! ${requestHeader.remoteAddress}"))
}
}
}

然后在您的应用程序全局对象中启用它:
object Global extends WithFilters(IPFilter) with GlobalSettings

如果您想要更大的灵活性,您可以使用相同的逻辑,但使用 Action composition 而不是全局过滤器。

关于scala - 限制对 Play Framework (Scala) 中特定 IP 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25228542/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com