处理响应中的身份验证错误
Handling authentication errors in response
从 Angular 4 应用程序,我正在调用部署在 Tomcat 上的 REST 服务。对于身份验证,我使用的是 Kerberos,它在正常情况下按预期工作。
我在 Angular 中遇到 Kerberos 身份验证失败时处理错误的问题(假设是由于 AD 中不存在的用户)。
这是我的 Angular 代码
this.restService.executeGET(url)
.subscribe(
(response: Response) => {
let httpResponseStatus = response.status;
console.log('httpResponseStatus: '+httpResponseStatus+', httpResponseAuthHeader: '+httpResponseAuthHeader)
//Do something with the Response
}
,
(error) => {
//Do something with the Error
console.log('Authenication Failed' + error);
}
)
executeGET(url: string) {
let reqHeaders = new Headers({ 'Content-Type': 'application/json' });
reqHeaders.append('Accept', 'application/json');
return this.http.get(url, { headers: reqHeaders });
}
当身份验证成功并且服务器返回 200 时,'(response: Response) => {}' 将按预期执行。当响应是带有 WWW-Authenticate 的 401 代码时:协商 header,'response' 块和 'error' 块都不会被执行并且浏览器显示“页面无法显示”留言。
当我查看 IE 11 网络选项卡时,它显示响应已作为 401/Negotiate 返回,但由于某种原因它正在逃避 angular 代码。
似乎浏览器甚至在 Angular 代码有机会加载之前就显示“页面无法显示”消息。
即使身份验证失败,我如何确保执行某些代码块,以便我可以采取适当的操作,例如将用户重定向到登录页面。
只需将此检查添加到服务 http 调用中
import 'rxjs/add/operator/catch';
.catch(e => {
if (e.status === 401) {
return Observable.throw('Not authorized');
}
// do other stuff
});
并在组件订阅中
this.your service.methodname()
.subscribe(data => {
// your data
}, (err) => {
if (err === 'Not Authorized') {
// Do your stuff here
});
如果您想要一个全局 401 处理程序用于您的应用程序服务,您可以在 Angular
中查看使用 http xhr 的答案
从 Angular 4 应用程序,我正在调用部署在 Tomcat 上的 REST 服务。对于身份验证,我使用的是 Kerberos,它在正常情况下按预期工作。
我在 Angular 中遇到 Kerberos 身份验证失败时处理错误的问题(假设是由于 AD 中不存在的用户)。
这是我的 Angular 代码
this.restService.executeGET(url)
.subscribe(
(response: Response) => {
let httpResponseStatus = response.status;
console.log('httpResponseStatus: '+httpResponseStatus+', httpResponseAuthHeader: '+httpResponseAuthHeader)
//Do something with the Response
}
,
(error) => {
//Do something with the Error
console.log('Authenication Failed' + error);
}
)
executeGET(url: string) {
let reqHeaders = new Headers({ 'Content-Type': 'application/json' });
reqHeaders.append('Accept', 'application/json');
return this.http.get(url, { headers: reqHeaders });
}
当身份验证成功并且服务器返回 200 时,'(response: Response) => {}' 将按预期执行。当响应是带有 WWW-Authenticate 的 401 代码时:协商 header,'response' 块和 'error' 块都不会被执行并且浏览器显示“页面无法显示”留言。
当我查看 IE 11 网络选项卡时,它显示响应已作为 401/Negotiate 返回,但由于某种原因它正在逃避 angular 代码。
似乎浏览器甚至在 Angular 代码有机会加载之前就显示“页面无法显示”消息。
即使身份验证失败,我如何确保执行某些代码块,以便我可以采取适当的操作,例如将用户重定向到登录页面。
只需将此检查添加到服务 http 调用中
import 'rxjs/add/operator/catch';
.catch(e => {
if (e.status === 401) {
return Observable.throw('Not authorized');
}
// do other stuff
});
并在组件订阅中
this.your service.methodname()
.subscribe(data => {
// your data
}, (err) => {
if (err === 'Not Authorized') {
// Do your stuff here
});
如果您想要一个全局 401 处理程序用于您的应用程序服务,您可以在 Angular