更改 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
更改其子类中的 QPushButton 区域掩码以创建 RoundButton
Netsuite - REST API (restlet) - 创建记录导致 INVALID_LOGIN_ATTEMPT 在第二次和更多记录请求失败