Wildfly10的REST客户端问题

时间:2017-07-26 12:54:22

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

您好我的服务器端休息客户端应该调用另一个服务器休息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应用程序完成的服务器端调用。

这里的代码: (Superclass方法返回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 Client一起工作正常(cookie标头等于播放WS请求)

使用JAX-RS impl的JBoss AS 7.1(ee6)一切正常。由Jersey提供

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

有什么建议吗? 感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

log http requests in Wildfly

希望它有所帮助。