JavaHttpClient基本認証
1. 概要
この短いチュートリアルでは、基本認証について見ていきます。 それがどのように機能するかを確認し、この種の認証を使用するように JavaHttpClientを構成します。
2. 基本認証
たとえば、baeldungユーザー名とHttpClientパスワードで認証するには、次のヘッダーを送信する必要があります。
Basic YmFlbGR1bmc6SHR0cENsaWVudA==
base64デコーダーを使用し、デコードされた結果を確認することで確認できます。
3. JavaHttpClient
Java 9は、Java11で標準化されたインキュベーションモジュールとして新しいHttpClientを導入しました。Java 11を使用するため、java.net.httpパッケージから簡単にインポートできます。追加の構成や依存関係はありません。
今のところ、認証なしで単純なGETリクエストを実行することから始めましょう。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(new URI("https://postman-echo.com/get"))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
logger.info("Status {}", response.statusCode());
まず、HTTPリクエストの実行に使用できるHttpClientを作成します。 次に、ビルダーデザインパターンを使用してHttpRequestを作成します。 GETメソッドは、リクエストのHTTPメソッドを設定します。 uriメソッドは、リクエストを送信するURLを設定します。
その後、クライアントを使用してリクエストを送信します。 send メソッドの2番目のパラメーターは、応答ボディハンドラーです。 これは、応答本文をStringとして扱いたいことをクライアントに通知します。
アプリケーションを実行して、ログを確認しましょう。 出力は次のようになります。
INFO com.baeldung.httpclient.basicauthentication.HttpClientBasicAuthentication - Status 200
HTTPステータスが200であることがわかります。これは、リクエストが成功したことを意味します。その後、認証を処理する方法を見てみましょう。
4. HttpClientオーセンティケーターの使用
認証を構成する前に、それをテストするためのURLが必要です。 認証が必要なPostmanEchoエンドポイントを使用してみましょう。 まず、前のURLをこれに変更して、アプリケーションを再実行します。
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(new URI("https://postman-echo.com/basic-auth"))
.build();
ログを確認して、ステータスコードを探しましょう。 今回は、HTTPステータス401「Unauthorized」を受け取りました。 この応答コードは、エンドポイントに認証が必要であるが、クライアントが資格情報を送信しなかったことを意味します。
必要な認証データを送信するようにクライアントを変更してみましょう。 HttpClient Builderを構成することでこれを行うことができ、クライアントは設定した資格情報を使用します。このエンドポイントは、ユーザー名「postman」とパスワード
HttpClient client = HttpClient.newBuilder()
.authenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("postman", "password".toCharArray());
}
})
.build();
アプリケーションをもう一度実行してみましょう。 これでリクエストは成功し、HTTPステータス200を受け取ります。
5. HTTPヘッダーを使用して認証する
別のアプローチを使用して、認証を必要とするエンドポイントにアクセスできます。 前のセクションから、Authorizationヘッダーの作成方法を学習したので、その値を手動で設定できます。 ただし、これは、オーセンティケーターを介して一度設定するのではなく、リクエストごとに実行する必要があります。
オーセンティケーターを削除して、リクエストヘッダーを設定する方法を見てみましょう。 base64エンコーディングを使用してヘッダー値を作成する必要があります。
private static final String getBasicAuthenticationHeader(String username, String password) {
String valueToEncode = username + ":" + password;
return "Basic " + Base64.getEncoder().encodeToString(valueToEncode.getBytes());
}
Authorization ヘッダーにこの値を設定して、アプリケーションを実行してみましょう。
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(new URI("https://postman-echo.com/basic-auth"))
.header("Authorization", getBasicAuthenticationHeader("postman", "password"))
.build();
リクエストは成功しました。これは、ヘッダー値を正しく作成して設定したことを意味します。
6. 結論
この短いチュートリアルでは、基本認証とは何か、そしてそれがどのように機能するかを見ました。 Java HttpClient を、 authenticationator を設定することにより、基本認証で使用しました。 HTTPヘッダーを手動で設定することにより、認証に別のアプローチを使用しました。
いつものように、これらの例のソースコードは、GitHubでから入手できます。