2017-08-11 4 views
0

Von einer Angular 4 App aus rufe ich REST-Dienste auf Tomcat auf. Für die Authentifizierung verwende ich Kerberos und es funktioniert wie erwartet für positive Fälle.Behandlung von Authentifizierungsfehlern als Antwort

ich ein Problem im Umgang mit Fehlern in Angular bin vor, wenn die Kerberos-Authentifizierung (lassen Sie uns sagen Benutzer aufgrund nicht in AD bestehenden) ausfällt.

Hier ist mein Eckige Code

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 }); 
    } 

Wenn die Authentifizierung erfolgreich ist und 200 von dem Server zurückgegeben wird, '(Antwort: Response) => {}' wird wie erwartet ausgeführt. Wenn die Antwort 401-Code mit WWW-Authenticate: Negotiate-Header ist, wird weder der Block "response" noch der Block "error" ausgeführt, und der Browser zeigt die Meldung "Seite kann nicht angezeigt werden" an.

Wenn ich IE 11 Registerkarte Netzwerk aussehen, zeigt es, dass Antwort als 401 zurückgegeben wurde/Verhandeln aber aus irgendeinem Grund ist es den Winkelcode umgehen.

Response Header 1

Response Header 2

Es scheint, dass Browser die zeigt Meldung ‚kann Seite nicht angezeigt werden‘, noch bevor der Angular Code eine Chance zu laden bekommen.

Wie kann ich sicherstellen, dass einiger Code-Block selbst ausgeführt wird, wenn die Authentifizierung fehlschlägt, so dass ich wie Umleiten Benutzer entsprechende Maßnahmen ergreifen kann zur Login-Seite.

+0

Dienst hinzufügen, um einen Fehler wie '401' wie https://stackoverflow.com/questions/44108285/angular-4-custom-errorhandler-doesnt-r behandeln cognize-custom-error –

Antwort

0

Fügen Sie einfach diesen Scheck an den Dienst http Anruf

import 'rxjs/add/operator/catch'; 
.catch(e => { 
      if (e.status === 401) { 
       return Observable.throw('Not authorized'); 
      } 
      // do other stuff 
     }); 

Und in den Komponenten Abonnieren

this.your service.methodname() 
     .subscribe(data => { 
      // your data 
     }, (err) => { 
      if (err === 'Not Authorized') { 
// Do your stuff here 
     }); 

Und wenn Sie einen globalen 401-Handler für Ihre Anwendung Service mögen, können Sie diese Antwort überprüfen Sie, dass verwendet http xhr in Angular Interceptor

Verwandte Themen