Mic*_*zuk 4 scala playframework-2.0 playframework-2.2
如何使用Scala限制在Play Framework中访问IP列表?
我正在使用Play Framework 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", ...]
Run Code Online (Sandbox Code Playgroud)
然后创建一个全局过滤器,应用于每个传入的请求,如:
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}"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的应用程序Global对象中启用它:
object Global extends WithFilters(IPFilter) with GlobalSettings
Run Code Online (Sandbox Code Playgroud)
如果您想要更多灵活性,可以使用相同的逻辑,但使用Action组合而不是全局过滤器.