Javaに401エラーコードがある場合、自動的にログインして元のリクエストを再試行する

外観:

API呼び出しを使用するためにApache HttpClientを使用しています。

ログインAPI呼び出しを使用してサインイントークンを取得し、他のすべてのAPI呼び出しでこのトークンをヘッダーパラメーターとして使用しています。このサインイントークンはしばらくすると期限切れになり、その後のAPI呼び出しは401承認されていないエラーを返します。Apache HttpCleintが401エラーを検出し、自動的にサインインして元のAPI呼び出しを再試行できるようにしたいのですが。

グーグルで私はまさに私の要件であるリンクを見つけました。401で自動的に再試行し、HttpClient 4.3で特定のリクエストを送信する

ここで提案されているようにOkHttpClientを使用することはできませんが、ここで提案されている他のソリューションは、「実行」メソッドの結果をキャプチャしたHttpClientを介してProxyクラスを書き込むことです。私はこれを行う方法についての考えを持っていません。

誰かがこれについて私を助けてくれますか?

zaerymoghaddam:

インターフェースMyHttpClientを実装するコードのようなクラスを持つことができHttpClientます。デコレータパターンを使用できます。つまり、実際のHttpClientクラスの内部インスタンスがあり、そのメソッド呼び出しのほとんどすべてをそのクラスに委任します。

public class MyHttpClient implements HttpClient {
    private HttpClient httpClient;
    private String signinToken = ""

    public MyHttpClient() {
        this.httpClient = HttpClient5Factory.createHttpClient();
        this.signinToken = SigninTokenProvider.getToken();
    }

    @Override
    public HttpParams getParams() {
        return this.httpClient.getParams();
    }

    @Override
    public ClientConnectionManager getConnectionManager() {
        return this.httpClient.getConnectionManager();
    }

    ...
}

次に、このクラスでサインインヘッダーをフェッチするロジックを実装できます。または、他のクラスにある場合は、このクラスがそれらを呼び出して、必要に応じてサインイントークンを更新できます。このクラスにサインインヘッダーを追加すると、サインインを1か所で処理できるようになるため、はるかに意味があると思います。

executeメソッドの実装では、次のようなコードが必要です。

@Override
public HttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException {

    //  add signin header to each request
    request.addHeader(new BasicHeader("Authorization", this.signinToken));

    HttpResponse response = httpClient.execute(request);
    if(response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
        //  do the authentication process again
        this.signinToken = SigninTokenProvider.getToken();
        request.removeHeader("Authorization");
        request.addHeader(new BasicHeader("Authorization", this.signinToken));

        //  resend the request
        response = httpClient.execute(request);
    }

    return response;
}

ご覧のとおり、実際のAPIを呼び出して応答ステータスを確認できます。401の場合、認証プロセスをやり直して新しいサインイン値をフェッチし、新しいサインイン値を使用してリクエストを再試行できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

リクエストを自動的に再試行するためのhttpコードは何ですか?

分類Dev

HTTPエラーコードが500の場合、AngularはAPIリクエストを再試行します

分類Dev

Microsoft Graph SDKのデフォルトの再試行ハンドラーは、リクエストを送信する前にエンドポイントがスロットルされているかどうかをチェックしますか?

分類Dev

iOS AFNetworkingは、インターネット接続が回復すると、リクエストを自動的に再試行します

分類Dev

Webリクエストにエラーがある場合、コントローラーでpromise(.then())を実行しないことは可能ですか?

分類Dev

コマンドエラーが発生したときにbashスクリプトの関数を自動実行する方法はありますか?

分類Dev

ステータスコードが200OKに等しくない場合は、Pollyを使用してAPIリクエストを再試行します

分類Dev

mechanizeには、リクエストが失敗した場合にリクエストを再試行するオプションがありますか?

分類Dev

httpエラー429の場合、azcliコマンドは自動的に再試行できますか

分類Dev

PyODBCを使用してデータベースにクエリを実行する同僚とPython.exeを共有する場合、SQL Server用のODBCドライバーのみをダウンロードする必要がありますか?

分類Dev

コンストラクターにエラーがある場合はプロセスを停止します

分類Dev

ユーザーアカウントを削除する際のfirebaseエラー「この操作は機密性が高く、最近の認証が必要です。このリクエストを再試行する前に、もう一度ログインしてください。」

分類Dev

リクエストの再試行中にBACKOFF_MAXをオーバーライドする方法

分類Dev

セルに値があるかどうかを確認し、ダイアログにエラーが表示されない場合はスクリプトを中止します値がある場合はスクリプトを実行します

分類Dev

トンネルサーバーがオフライン:リクエストがステータスコード502で失敗しました。gulpserveを実行するときに1秒再試行します

分類Dev

スプリングブートエンドポイントのパラメーターシグネチャは、両方のパラメーターが指定されている場合にあいまいなエンドポイント例外をスローします

分類Dev

java -cpコマンドに複数のjarファイルがある場合、エラー「エラー:メインクラスを検索またはロードできませんでした」が発生します

分類Dev

ユーザーがプロフィール写真と一緒にプロフィールに対してアクションを実行したい場合、クライアントがAPIに対して2つの異なるHTTPリクエストを送信する必要があります

分類Dev

PowerShellコマンドレットパラメーターがValueFromPipelineByPropertyNameを受け入れ、エイリアスがある場合、元のプロパティ名を取得するにはどうすればよいですか?

分類Dev

クラウドIDとクラウドエンドポイント、ロール/グループ内の特定のユーザーがエンドポイントに対してPOST / GETリクエストを行うことを禁止する方法はありますか

分類Dev

ゲートウェイセキュリティトークンを使用してHawkbitサーバーにGETリクエストを試行すると401エラーが発生する

分類Dev

この流動性スマートコントラクトコードをテストしようとしていますが、エラーが表示された場合。流動性は、tezosのスマートコントラクト言語であるocamlに似ています。

分類Dev

自動的にログインしたユーザーは、ログイン時に壊れたスクリプトを実行します。PCへのアクセスを回復する方法についてのアドバイスはありますか?

分類Dev

Twitter ストリーミング スクリプトがツイートの場所フィールドにキーエラーをスローする

分類Dev

その行のチェックボックスがチェックされている場合、「OncheckedChange」イベントでグリッドビュー内にあるドロップダウンリストをバインドします

分類Dev

すでにurllibとurllib3をインポートしている場合、リクエストを使用するにはリクエストライブラリをインポートする必要がありますか?-urllibx、混乱を要求する

分類Dev

Googleスプレッドシートを行の下に自動スクロールさせようとしています。コードを試しましたが、エラーが発生しました

分類Dev

コントローラーレベルのリクエストマッピングが、Spring MVCコントローラークラスへの特定のメソッドに対して無効であることを指定できますか?

分類Dev

ソリューションファイル内のプロジェクトにMsBuildプロパティが設定されている場合、カスタムコンパイルエラーをスローする方法はありますか?

Related 関連記事

  1. 1

    リクエストを自動的に再試行するためのhttpコードは何ですか?

  2. 2

    HTTPエラーコードが500の場合、AngularはAPIリクエストを再試行します

  3. 3

    Microsoft Graph SDKのデフォルトの再試行ハンドラーは、リクエストを送信する前にエンドポイントがスロットルされているかどうかをチェックしますか?

  4. 4

    iOS AFNetworkingは、インターネット接続が回復すると、リクエストを自動的に再試行します

  5. 5

    Webリクエストにエラーがある場合、コントローラーでpromise(.then())を実行しないことは可能ですか?

  6. 6

    コマンドエラーが発生したときにbashスクリプトの関数を自動実行する方法はありますか?

  7. 7

    ステータスコードが200OKに等しくない場合は、Pollyを使用してAPIリクエストを再試行します

  8. 8

    mechanizeには、リクエストが失敗した場合にリクエストを再試行するオプションがありますか?

  9. 9

    httpエラー429の場合、azcliコマンドは自動的に再試行できますか

  10. 10

    PyODBCを使用してデータベースにクエリを実行する同僚とPython.exeを共有する場合、SQL Server用のODBCドライバーのみをダウンロードする必要がありますか?

  11. 11

    コンストラクターにエラーがある場合はプロセスを停止します

  12. 12

    ユーザーアカウントを削除する際のfirebaseエラー「この操作は機密性が高く、最近の認証が必要です。このリクエストを再試行する前に、もう一度ログインしてください。」

  13. 13

    リクエストの再試行中にBACKOFF_MAXをオーバーライドする方法

  14. 14

    セルに値があるかどうかを確認し、ダイアログにエラーが表示されない場合はスクリプトを中止します値がある場合はスクリプトを実行します

  15. 15

    トンネルサーバーがオフライン:リクエストがステータスコード502で失敗しました。gulpserveを実行するときに1秒再試行します

  16. 16

    スプリングブートエンドポイントのパラメーターシグネチャは、両方のパラメーターが指定されている場合にあいまいなエンドポイント例外をスローします

  17. 17

    java -cpコマンドに複数のjarファイルがある場合、エラー「エラー:メインクラスを検索またはロードできませんでした」が発生します

  18. 18

    ユーザーがプロフィール写真と一緒にプロフィールに対してアクションを実行したい場合、クライアントがAPIに対して2つの異なるHTTPリクエストを送信する必要があります

  19. 19

    PowerShellコマンドレットパラメーターがValueFromPipelineByPropertyNameを受け入れ、エイリアスがある場合、元のプロパティ名を取得するにはどうすればよいですか?

  20. 20

    クラウドIDとクラウドエンドポイント、ロール/グループ内の特定のユーザーがエンドポイントに対してPOST / GETリクエストを行うことを禁止する方法はありますか

  21. 21

    ゲートウェイセキュリティトークンを使用してHawkbitサーバーにGETリクエストを試行すると401エラーが発生する

  22. 22

    この流動性スマートコントラクトコードをテストしようとしていますが、エラーが表示された場合。流動性は、tezosのスマートコントラクト言語であるocamlに似ています。

  23. 23

    自動的にログインしたユーザーは、ログイン時に壊れたスクリプトを実行します。PCへのアクセスを回復する方法についてのアドバイスはありますか?

  24. 24

    Twitter ストリーミング スクリプトがツイートの場所フィールドにキーエラーをスローする

  25. 25

    その行のチェックボックスがチェックされている場合、「OncheckedChange」イベントでグリッドビュー内にあるドロップダウンリストをバインドします

  26. 26

    すでにurllibとurllib3をインポートしている場合、リクエストを使用するにはリクエストライブラリをインポートする必要がありますか?-urllibx、混乱を要求する

  27. 27

    Googleスプレッドシートを行の下に自動スクロールさせようとしています。コードを試しましたが、エラーが発生しました

  28. 28

    コントローラーレベルのリクエストマッピングが、Spring MVCコントローラークラスへの特定のメソッドに対して無効であることを指定できますか?

  29. 29

    ソリューションファイル内のプロジェクトにMsBuildプロパティが設定されている場合、カスタムコンパイルエラーをスローする方法はありますか?

ホットタグ

アーカイブ