2

localhost:7001/MyServlet のようなページがあります。以下のようにhttp接続リクエストを行っています

String url = "http://localhost:7001/MyServlet"
PostMethod method = new PostMethod(url); 
HttpClient client = new HttpClient();

ただし、「MyServlet」は j_security_check によって保護されています。そのため、接続を確立しているときに、ログインページにリダイレクトされます。

1 つの HttpConnection で、認証を受けて自分の url にアクセスする方法

注:私はApache共通のhttpclientを使用しています

import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.methods.PostMethod;
4

1 に答える 1

0

HTTP BASIC 認証が有効になっていない限り、1 回のリクエストでログインしてサーバーを呼び出すことができるとは思えません。HTTPClient の API の詳細はまだわかりませんが、基本的には Cookie を使用してセッションを追跡する必要があります。ログインを POST に送信します/j_security_check。次に、サーブレットにアクセスします。/j_acegi_security_check( ACEGI Security を使用する場合も、同じ基本プロセスが機能します。)

Tomcat の厄介な点は、すぐに投稿/j_security_checkすると 400 の「悪い要求」が返されることです。そのオーセンティケーターは、状態の遷移についてかなり気難しいものであり、プログラムによるクライアントを念頭に置いて設計されていないことは明らかです。最初にアクセスする必要があります/loginEntry(セッション Cookie 以外の応答を破棄できます)。次に、ログイン情報を に投稿します/j_security_check次に/loginEntry、実際に新しいログイン情報を保存する結果のリダイレクトに従います(私が思うに戻ります)。最後に、目的のサーブレットに投稿します! NetBeans #5c3cb7fb60feは、Tomcat のコンテナー認証を使用して Hudson サーバーにログインするアクションを示しています。

于 2012-05-04T15:50:49.773 に答える