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)
}
}
}
おかげで、
は、以下のコードを参照してください。ベン