2017-07-26 3 views
0

Hallo ich habe ein Problem mit einem Server-Seite Ruhe-Client, der eine andere Server-Ruhe-API aufrufen soll. Es funktioniert tatsächlich mit JBoss AS 7.1 und Tomee, aber der Webservice antwortet mit einem 404, wenn ich Wildfly 10.1 verwende.REST Client Problem mit Wildfly10

Der Zielendpunkt verwendet die Cookie-Authentifizierung, um die Autorisierung zu überprüfen. Dies wird von einem servletFilter durchgeführt. Also, den Dienst zu nennen, ich habe ein Cookie: Cookie: "cookie_name: token"

Die Servlet-Filter tatsächlich gut funktioniert, sind infact, wenn ich die gleiche Webservice mit jeder Rest Client aufrufen (i versucht Intellij erstes und Postman) es funktioniert gut.

Das Problem tritt nur von Server Seite Aufruf erfolgt über ein Play Framework 1.2.5 Anwendung mit Play WS lib.

Hier ist der Code: (Oberklasse-Methode eine Instanz von WS.WSRequest zurückkehren)

@play.mvc.Before(priority = 0) 
    protected static WS.WSRequest authCookieHttpClient(String relativeUrl) throws IllegalStateException { 

     if (JWT_AUDIENCE != null && JWT_ISSUER != null && JWT_SECRET != null && JWT_TIMEOUT != null && API_ENDPOINT != null && AUTH_COOKIE_NAME != null) { 
      JWTClaims jwtClaims = new JWTClaims(
        JWT_ISSUER, 
        Security.getConnectedUser().username, 
        JWT_AUDIENCE, 
        JWT_TIMEOUT 
      ); 
      WS.WSRequest request = WS.url(API_ENDPOINT + relativeUrl); 
      JWTProducer jwtProducer = new JWTProducer(JWT_SECRET, jwtClaims); 

      try { 
       request.setHeader("Cookie", 
         AUTH_COOKIE_NAME + "=" + URLEncoder.encode(jwtProducer.signPayload(), "utf-8")); 
      } catch (UnsupportedEncodingException e) { 
       Logger.error("Unable to encode cookie info", e); 
      } 

      return request; 
     } 
     throw new IllegalStateException("Cannot use parent controller: " + ApiSubscriber.class + " without configuring API endpoint and JWT features"); 
    } 

Die Telefonvorwahl:

WS.HttpResponse res = authCookieHttpClient(areaUrl + sb.toString()).get(); 

Die gleiche Anforderung arbeitet gut mit Postman/Intellij Client (mit dem Cookie-Header gleich der Wiedergabe WS-Anfrage)

Alles funktioniert gut mit JBoss AS 7.1 (ee6) mit JAX-RS impl. zur Verfügung gestellt von Jersey

Es funktioniert nicht nur mit WildFly 10.1 (ee7) mit JAX-RS impl von RestEasy zur Verfügung gestellt. (Umleitungen wie wurde nicht von dem Cookie, so Client 404 zurückgeben)

Jeder Vorschlag? Danke.

Antwort

0

Das Problem wurde durch den Abfrage-String verursacht, der vom play framework java client generiert wurde. Während auf Jboss AS 7.1 mit Jersey funktionierte gut akzeptiert eine Abfrage wie var1=&var2=123 mit RestEasy schlägt dies fehl, aber keine Ausnahmebedingungen werden geworfen und es stellt sich heraus, eine 404 Response.

Der Zielendpunkt war natürlich die Zuordnung der queryString-Parameter mit @QueryParam von javax.ws.rs.

Ich habe die Lösung gefunden, Debugging-Informationen zu WildFly Standalone-XML (für Anfrage/Antwort) hinzuzufügen und dann die Ausnahmen wurden auch protokolliert.

log http requests in Wildfly

Hoffe, es hilft.