2017-08-11 18 views
0

Angular 4アプリから、私はTomcatにデプロイされたRESTサービスを呼び出しています。認証の場合、私はKerberosを使用しており、肯定的なケースでは期待どおりに動作しています。応答での認証エラーの処理

Kerberos認証が失敗したときにエラーが発生する問題を抱えています(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 Networkタブを見ると、Responseが401/Negotiateとして返されたことが示されますが、何らかの理由で角度コードを回避しています。

Response Header 2

Response Header 1そのブラウザが角度コードをロードするチャンスを得る前であっても「ページが表示できません」というメッセージが表示されるようです。

認証が失敗してもコードブロックが実行されるようにするには、ユーザーをログインページにリダイレクトするなどの適切な処置を講じることができます。

+0

サービスを追加して、「401」のようなエラーを処理します。https://stackoverflow.com/questions/44108285/angular-4-custom-errorhandler-doesnt-r ecognize-custom-error –

答えて

0

だけ

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

を購読し、あなたのアプリケーションサービスのグローバル401ハンドラをしたい場合は、この答えをすることを確認することができます

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

とコンポーネントのサービスHTTP呼び出しには、このチェックを追加角でhttp xhrを使用します。Interceptor

関連する問題