gpt4 book ai didi

scala - 我将如何在游戏框架 2.4.3 (Scala) 中实现拦截器/过滤器

转载 作者:行者123 更新时间:2023-12-04 19:44:13 25 4
gpt4 key购买 nike

我是 Play Framework 的新手,我想实现一个在请求进入 Action 类之前执行的拦截器或过滤器。

我想要一个拦截器/过滤器,如果某个 header 变量不存在,它会返回 HTTP 错误(例如 401)。

我做了一些谷歌搜索,发现了过滤器 (play.api.mvc.Filter) 对象,但实现返回 mvc.Result,而不是 Response。

override def apply(next: (mvc.RequestHeader) => Future[mvc.Result])(request: mvc.RequestHeader)

我能想到的另一个解决方案是通过扩展 ActionBuilder 创建一个自定义的 Action,但我宁愿不这样做,如果我能设计一个 catch all 功能,如 Filter。

任何帮助将不胜感激。谢谢。

最佳答案

供将来引用。这是过滤器的实现。感谢 tryx 的帮助。

import play.api.mvc
import play.api.mvc.{RequestHeader, Filter}
import play.api.mvc.Results._
import scala.concurrent.ExecutionContext.Implicits.global

class AuthorizedFilter(requestHeader: RequestHeader) extends Filter {



private def authorizationRequired(request: mvc.RequestHeader) = {

request.headers.get("Authorized").
map( authorizedValue => authorizedValue.eq("ABCDEFG")).
getOrElse(false)

}


override def apply(next: (mvc.RequestHeader) => Future[mvc.Result])(request: mvc.RequestHeader) = {
if(authorizationRequired(request)) {

println("YOU are authorized!!")

next(request)

}
println("NOT AUTHORIZED!")
Future {Unauthorized }
}
}

在应用程序的根级别创建一个 Filter 对象。 (/应用程序)。

import javax.inject.Inject

import play.api.http.HttpFilters

class Filters @Inject() (authorizedFilter: AuthorizedFilter) extends HttpFilters {

def filters = Seq(authorizedFilter)
}

关于scala - 我将如何在游戏框架 2.4.3 (Scala) 中实现拦截器/过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769122/

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