2016-04-22 15 views
1

私はヘッダーによる認証が必要なサービスを持っています。私は私のための値を生成する既存のJavaクライアントを持っています。 WSRequestHeaderFilterを使用してws要求にヘッダーを適用しようとしています。WSクライアントのWSRequestに、Play Frameworkからヘッダーを追加する

ブレークポイントを実行するとコードが正常に動作しているように見え、ヘッダーが適用されていることがわかります。しかし、私のテストサーバー(再生SIRDルーターを使用)ではヘッダーは適用されないようですか?

フィルターやそのような方法を使用して、要求に必要なヘッダーを表示させるにはどうすればよいですか?

フィルタ:

//code omitted for brevity 
def getStuff() = ws.url(s"${baseUrl}/authenticatedEndpoint").withRequestFilter(filter).get() 

テスト:クライアントで

class AuthenticatingFilter @Inject() (authHeaderGenerator: AuthHeaderGenerator) extends WSRequestFilter { 
     def apply(executor: WSRequestExecutor): WSRequestExecutor = { 
     new WSRequestExecutor { 
      override def execute(request: WSRequest): Future[WSResponse] = { 
      val headers = authHeaderGenerator.generateRequestHeaders(request.method, request.uri.toString, null).asScala.toList 
      executor.execute(request.withHeaders(headers:_*)) 
      } 
     } 
     } 
    } 

使用

// code omitted for brevity 

Server.withRouter() { 
     case GET(p"/authenticatedEndpoint") => Action { 
      request => 

      request.headers.get(authHeader) match { 
       case Some(authHeaderValue) => Results.Ok(expectedResult) 
       case _ => Results.Forbidden 
      } 
     } 
     } { 
     implicit port => 
      implicit val materializer = Play.current.materializer 

      WsTestClient.withClient { 
      client => 
       val authenticatedClient: AuthenticatedClient = new AuthenticatedClient(client,filter) 
       val result: String = Await.result(authenticatedClient.getStuff(), Duration.Inf) 
       result must beEqualTo(expectedResult) 
      } 

     } 
    } 

おかげで、

は、以下のコードを参照してください。

ベン

答えて

1

これは明らかにバグだった。私はこれにパッチを当て、変更がマスターブランチに統合されたので(https://github.com/playframework/playframework/pull/6077)、同様の問題がある場合、これは2.5.3(利用可能な場合)を再生するようにアップグレードすることで修正する必要があります

関連する問題