Wildfly10 的 REST 客户端问题

REST Client issue with Wildfly10

嗨,我有一个 Server-side rest 客户端的问题,它应该调用另一个服务器 rest api。 它实际上与 JBoss AS 7.1 和 Tomee 一起工作,但是当我使用 Wildfly 10.1 时,网络服务以 404 响应。

目标端点使用 cookie 身份验证来检查授权,这是由 servletFilter 完成的。 所以调用服务我有一个cookie: 饼干:"COOKIE_NAME:TOKEN"

servlet 过滤器实际上工作正常,事实上,如果我用任何其他客户端调用相同的 web 服务(我试过 Intellij 的一个和 Postman),它工作正常。

该问题仅发生在通过使用 play WS lib 的 Play framework 1.2.5 应用程序完成的服务器端调用中。

代码如下: (超类方法 return 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();

相同的请求在 Postman/Intellij 客户端上运行良好(cookie header 等于播放 WS 请求)

在 JBoss AS 7.1 (ee6) 和 JAX-RS impl 上一切正常。泽西岛提供

它不仅仅适用于 WildFly 10.1 (ee7) 以及 RestEasy 提供的 JAX-RS impl。 (重定向就像没有被 cookie 验证,所以客户端 return 404)

有什么建议吗? 谢谢

问题是由播放框架java客户端生成的queryString引起的。 虽然在 Jboss AS 7.1 上与 Jersey 一起工作正常接受像 var1=&var2=123 这样的查询与 RestEasy 失败但没有抛出异常,结果是 404 响应。

目标端点当然是使用 javax.ws.rs 中的 @QueryParam 映射 queryString 参数。

我找到了将调试信息添加到 WildFly standalone xml(对于 request/response)的解决方案,然后也记录了异常。

希望对您有所帮助。