2017-07-26 91 views
0

您好,我有一個服務器端休息客戶端應該調用另一個服務器休息API的問題。 它實際上與JBoss AS 7.1和Tomee一起工作,但當我使用Wildfly 10.1時,web服務響應404。REST客戶端與Wildfly10問題

目標端點使用cookie身份驗證來檢查授權,這由servletFilter完成。 於是撥打服務我有一個cookie: 的Cookie:「COOKIE_NAME:TOKEN」

的Servlet過濾器是實際工作的罰款,事實上如果我調用相同的web服務與任何其他客戶端(我試過的IntelliJ的一個郵差)它工作正常。

該問題只發生在服務器端調用通過Play框架1.2.5應用程序使用play WS lib完成。

這裏的代碼: (超類方法返回WS.WSRequest的一個實例)

@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"); 
    } 

調用代碼:

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

相同的請求工作正常與郵差/的Intellij客戶端( cookie頭等於播放WS請求)

所有工作正常與JAX-RS impl的JBoss AS 7.1(ee6)。由Jersey提供

它不適用於帶有RestEasy提供的JAX-RS impl的WildFly 10.1(ee7)。 (重定向類似不被cookie所支持,所以客戶端返回404)

任何建議? 謝謝。

回答

0

問題是由播放框架java客戶端生成的queryString造成的。 雖然在Jboss AS 7.1與澤西工作正常接受類似var1=&var2=123與RestEasy這樣的查詢失敗,但沒有引發任何異議,它變成了一個404響應。

目標端點當然是使用@QueryParam來自javax.ws.rs來映射queryString參數。

我發現該解決方案將調試信息添加到WildFly standalone xml(用於請求/響應),然後是登錄的異常。

log http requests in Wildfly

希望它能幫助。