从Angular 4应用程序,我调用Tomcat上部署的REST服务。对于身份验证,我使用的是Kerberos,它正如预期的那样正面工作。
当Kerberos身份验证失败时,我在处理Angular中的错误时遇到了问题(假设用户在AD中不存在)。
这是我的角色代码
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时,'(响应:响应)=> {}'按预期执行。当响应是具有WWW-Authenticate:Negotiate标头的401代码时,“响应”块和“错误”块都不会被执行,并且浏览器显示“页面无法显示”消息。
当我查看IE 11网络选项卡时,它显示响应已返回为401 / Negotiate但由于某种原因它正在回避角度代码。
即使在Angular代码有机会加载之前,浏览器似乎仍显示“无法显示页面”消息。
即使身份验证失败,我如何确保执行某些代码块,以便我可以采取适当的操作,例如将用户重定向到登录页面。