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

从Angular 4应用程序中,我调用部署在Tomcat上的REST服务。对于身份验证,我使用Kerberos,它在积极的情况下可以正常工作

当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: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处理程序,您可以检查这个答案,它在Angular

add service中使用http xhr来处理类似401这样的错误