【发布时间】: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