2016-04-22 8 views
1

Ich habe einen Dienst, der Authentifizierung über Header erfordert. Ich habe einen bestehenden Java-Client, der die Werte für mich generiert. Ich versuche, die Header auf eine WS-Anfrage mit einem WSRequestHeaderFilter anzuwenden.Hinzufügen von Headern zu WSRequest im WS-Client von Play Framework

Der Code scheint gut zu laufen, wenn ich Haltepunkt und ich kann sehen, die Header angewendet werden. Aber in meinem Test Server (mit dem Play SIRD Router) scheinen die Header nicht zu gelten?

Wie kann ich meine erforderlichen Header in der Anfrage mit einem Filter oder einer solchen Methode erscheinen?

Sehen Sie den Code unten:

Filter:

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:_*)) 
      } 
     } 
     } 
    } 

Verwendung in Client:

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

Test:

// 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) 
      } 

     } 
    } 

Danke,

Ben

Antwort

1

Wie sich herausstellte, war dies ein Fehler im Spiel. Ich habe dies gepatcht und die Änderung wurde in den Master-Zweig (https://github.com/playframework/playframework/pull/6077) zusammengeführt. Wenn Sie ähnliche Probleme haben, sollte dies durch ein Upgrade auf Play 2.5.3 behoben werden (wenn verfügbar)

Verwandte Themen