更改 Restlet 发回的状态码以进行身份​​验证

Posted

技术标签:

【中文标题】更改 Restlet 发回的状态码以进行身份​​验证【英文标题】:Change status code sent back by Restlet for authenication 【发布时间】:2013-04-06 15:47:41 【问题描述】:

我正在使用带有摘要式身份验证的 Restlet。效果很好。除了我想通过避免在第一次发回 401 时弹出浏览器的身份验证对话框来使其对 ajax/javascript 更加友好。

这是我认为可行的方法:

    使用文本字段获取用户/通行证并存储在 javascript 对象中。 Ajax 调用安全资源。 Reselt 发送回非 401 代码(例如 406)和 Digest Auth 信息。 Javascript 捕获代码,将请求/用户/密码打包成哈希,发送到 restlet。

a) 上述方法可行吗?

b) 如何在 Restlet 中使用 Digest 发送不同的状态码?

【问题讨论】:

【参考方案1】:

是的,您必须返回非 401 响应,因为您无法更改浏览器行为,因为浏览器将始终显示弹出窗口。

另见How to prevent browser to invoke basic auth popup and handle 401 error using Jquery?

您可以通过修改/覆盖 DigestAuthenticator 并设置不同的响应来更改响应,或者使用将检测 401 并将其切换到另一个状态的过滤器。

【讨论】:

我认为过滤器是一个不错的选择。我是restlet的新手,有任何代码提示它如何在过滤器中工作吗? 与简单的servlet过滤器没有太大区别,只是实现后处理并更改状态码;

以上是关于更改 Restlet 发回的状态码以进行身份​​验证的主要内容,如果未能解决你的问题,请参考以下文章

Restlet CorsFilter 与 ChallengeAuthenticator

$ stateChangeStart - 未阻止状态更改

Passport.js 身份验证失败时发回 JSON 响应

更改其子类中的 QPushButton 区域掩码以创建 RoundButton

Netsuite - REST API (restlet) - 创建记录导致 INVALID_LOGIN_ATTEMPT 在第二次和更多记录请求失败

常见的Http状态码以及其代表的意义