Angular 在响应中处理身份验证错误
从Angular 4应用程序中,我调用部署在Tomcat上的REST服务。对于身份验证,我使用Kerberos,它在积极的情况下可以正常工作 当Kerberos身份验证失败时,比如说由于AD中不存在用户,我在处理Angular中的错误时面临一个问题 这是我的角度代码Angular 在响应中处理身份验证错误,angular,rest,authentication,kerberos,http-authentication,Angular,Rest,Authentication,Kerberos,Http Authentication,从Angular 4应用程序中,我调用部署在Tomcat上的REST服务。对于身份验证,我使用Kerberos,它在积极的情况下可以正常工作 当Kerberos身份验证失败时,比如说由于AD中不存在用户,我在处理Angular中的错误时面临一个问题 这是我的角度代码 this.restService.executeGET(url) .subscribe( (response: Response) => { let httpResponseStatus
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:Negotiate标头的401代码时,“响应”块和“错误”块都不会执行,浏览器会显示“页面无法显示”消息
当我查看IE11网络选项卡时,它显示响应已返回为401/协商,但出于某种原因,它在回避角度代码
似乎在角度代码加载之前,浏览器就显示了“页面无法显示”消息
我如何确保即使身份验证失败也能执行某些代码块,以便我可以采取适当的操作,例如将用户重定向到登录页面 只需将此检查添加到服务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处理程序,您可以检查这个答案,它在Angularadd service中使用http xhr来处理类似401这样的错误