0
セキュリティのためのカスタマイズアクションを作成しようとしています。私はアプリケーションでセキュリティを処理し、カスタムアクションを作成しようとして、Scala Oauth を使用して、カスタムアクションにScala Oauthセキュリティをラップしています。 Play Frameworkドキュメンテーションによると、私は2つの方法でラップされたリクエストオブジェクトを使用していますが、残念ながら、カスタムのリクエストハンドラをカスタムアクションハンドラで取得していません。Play Framework 2.3.x:Play FrameworkでScala Oauthを使用してリクエストオブジェクトをラップする
case class AuthRequest[A](user: User, request: Request[A]) extends WrappedRequest[A](request)
最初の方法
case class CustomSecurityAction[A](action: Action[A]) extends Action[A] with OAuth2Provider{
def apply(request: Request[A]): Future[Result] = {
implicit val executionContext: ExecutionContext = play.api.libs.concurrent.Execution.defaultContext
request.headers.get("Host").map { host =>
authorize(new SecurityDataHandler(host)) { authInfo =>
action(AuthRequest(authInfo.user, request))
}(request, executionContext)
} getOrElse {
Future.successful(Unauthorized("401 No user\n"))
}}
lazy val parser = action.parser
}
object SecurityAction extends ActionBuilder[Request] with OAuth2Provider {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
block(request)
}
override def composeAction[A](action: Action[A]) = new CustomSecurityAction(action)
}
第二の方法
object SecurityAction extends ActionBuilder[Request] with OAuth2Provider {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
implicit val executionContext: ExecutionContext = play.api.libs.concurrent.Execution.defaultContext
request.headers.get("Host").map { host =>
authorize(new SecurityDataHandler(host)) { authInfo =>
block(AuthRequest(authInfo.user, request))
}(request, executionContext)
} getOrElse {
Future.successful(Unauthorized("401 No user\n"))
}
}
私は私のカスタムでuser
オブジェクトを使用しようとしていたときに、両方の方法によると:方法は次のとおり私は次のコンパイル時のエラーを取得しています:
value user is not a member of play.api.mvc.Request[play.api.mvc.AnyContent]
val user = request.user
私のハンドラのコードです:簡単な問題は、上記のコードでは、
def testCustomAction = SecurityAction { request =>
val user = request.user
Future.successful(Ok("Apna To Chal Gya"))
}