【问题标题】:REST Client issue with Wildfly10Wildfly10 的 REST 客户端问题
【发布时间】:2018-01-01 19:35:36
【问题描述】:

您好,我的服务器端休息客户端有问题,它应该调用另一个服务器休息 api。 它实际上适用于 JBoss AS 7.1 和 Tomee,但是当我使用 Wildfly 10.1 时,Web 服务会以 404 响应。

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

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

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

代码如下: (超类方法返回一个 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 标头等于 play WS 请求)

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

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

有什么建议吗? 谢谢。

【问题讨论】:

    标签: java jersey jboss7.x resteasy wildfly-10


    【解决方案1】:

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

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

    我找到了将调试信息添加到 WildFly 独立 xml(用于请求/响应)以及记录异常的解决方案。

    log http requests in Wildfly

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 2018-03-26
      • 2022-07-14
      相关资源
      最近更新 更多