RESTLET 2.1RC1:从 GWT 客户端发送到服务器的 ChallengeResponse 始终为 NULL
Posted
技术标签:
【中文标题】RESTLET 2.1RC1:从 GWT 客户端发送到服务器的 ChallengeResponse 始终为 NULL【英文标题】:RESTLET 2.1RC1 : ChallengeResponse send from GWT client to server always NULL 【发布时间】:2011-12-12 19:39:59 【问题描述】:我有:
客户端上的 RESTLET GWT 2.1RC1 服务器上的 RESTLET J2EE 2.1RC1我一直在努力解决这个问题,但无论我尝试什么:
ClientResource r = new ClientResource("/service" + UsersServiceProxy.URL);
r.setChallengeResponse(ChallengeScheme.HTTP_BASIC, "user1", "secret");
r.setOnResponse(new Uniform()
public void handle(Request request, Response response)
.....
);
r.get();
或者这个代码:
UserServiceProxy userService = GWT.create(UserServiceProxy.class);
userService.getClientResource().setReference(url);
userService.getClientResource().setChallengeResponse(new ChallengeResponse(ChallengeScheme.HTTP_BASIC, "user1", "secret"));
userService.getUser(username + ":" + password, new Result<User>()
@Override
public void onFailure(Throwable caught)
......
@Override
public void onSuccess(User user)
.....
);
问题:
在服务器端没有收到 ChallengeResponse (==NULL)。使用 wireshark 调试显示没有通过网络发送“Authorization:”。
使用 Chrome 开发工具,我可以看到 XHR 请求被发送到:http://user1:secret@127.0.1.1:8888/service/user
所以在这里,用户名/密码被传递给服务器,但不是作为身份验证标头? 我怎样才能访问这些服务器端?
我的设置不正确吗? 这是this bug的回归吗?
【问题讨论】:
对 Chrome 使用 CURL 或 @REST 控制台,我可以完美接收基本身份验证,IMO 排除了这可能是服务器端问题。 【参考方案1】:在 Restlet GWT Edition 2.1RC1 中没有发送授权标头,我提交了一个至少修复了 BASIC auth 的补丁,所以我可以继续前进。
见http://restlet.tigris.org/issues/show_bug.cgi?id=1060
【讨论】:
【参考方案2】:此错误已修复。请参阅下一个 2.1 RC2 和 2.0.11 版本。
请参阅此问题以获取有关修复的更新: http://restlet.tigris.org/issues/show_bug.cgi?id=1060
【讨论】:
我看到了同样的问题,现在使用相同的代码。 GWT2.2.0 和 Restlet 2.1.2 ... 我可能应该补充一点,我在服务器端看到了 OPTIONS 请求,即使执行了 GET 也是如此。是否与首先执行 OPTIONS 而restlet 不期望 401 相关? 更新:实际上,/my Restlet/GWT 设置有问题。即使Representation representation = new ClientResource( "http://localhost:2882/programs/" ).get();
(没有在服务器上进行身份验证)也会返回“null”。但是restlet.jse 可以使用该代码。也许我需要降级...以上是关于RESTLET 2.1RC1:从 GWT 客户端发送到服务器的 ChallengeResponse 始终为 NULL的主要内容,如果未能解决你的问题,请参考以下文章
Intellij 12、GWT 2.6.0-rc1 和超级开发模式
Retrofit2 POST 方法获取代码 400 但适用于 Restlet 客户端