【发布时间】:2012-03-21 14:58:07
【问题描述】:
我使用@RolesAllowed({"Customer"}) 保护了一个网络服务。我已经使用 Jersey 客户端 API 成功测试了代码和安全配置。现在,我正在尝试使用 AJAX 从 JavaScript 访问相同的服务。我在 XMLHttpRequest 的 open 方法中设置了凭据:
xhr.open("GET", url, true, "bob", "paasss");
这根本行不通。让我解释一下:
XHR 首先发送一个没有 Authorization 标头的请求。仅当它遇到 401 响应状态和“WWW-Authenticate”标头时,它才会重试请求并且这次发送授权标头。当使用 @RolesAllowed 保护服务时,Jersey 会发送 403 状态。因此,永远不会发送授权标头。
我可以让它工作的唯一方法是自己设置授权标头:
xhr.setRequestHeader("Authorization", "Basic Ym9iOnBhc3N3MHJk");
这是可以接受的做事方式吗?我可以让 Jersey 返回 401 而不是 403 以及“WWW-Authenticate”标头吗?
谢谢!
【问题讨论】: