0

MY Domino サーバーはセッション認証が有効になっており、HTTP ポート番号は 8080 に設定されています。

以下のプログラムを実行してドミノ HTTP セッションを取得すると、常に以下の出力が得られます。

RESPONSE CODE 200 がスムーズな操作を示していることは知っています。しかし、サーバー上に作成された HTTP セッションが表示されません。UsernamePasswordCredentials("xxxxx", "xxxxx") に間違った資格情報を提供しても、応答コードとして 200 が返されます。これに関する提案はありますか?

public class ClientAuthentication { 

  public static void main(String[] args) {

         DefaultHttpClient httpclient = new DefaultHttpClient();
            try {


                httpclient.getCredentialsProvider().setCredentials( new AuthScope("10.40.xx.xx", 8080), 
                                                                        new UsernamePasswordCredentials("xxxxx", "xxxxx"));
                HttpPost httppost = new HttpPost("http://10.40.xx.xx:8080/names.nsf?Login");
                System.out.println("executing request" + httppost.getRequestLine());
                HttpResponse response = httpclient.execute(httppost);

                HttpEntity entity = response.getEntity();

                if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK){ 
                    System.out.println("---------------OKAY OKAY-------------------------");
                     System.out.println("RESPONSE CODE " + response.getStatusLine().getStatusCode());
                }

                if (entity != null) {
                    System.out.println("Response content length: " + entity.getContentLength());
                }


            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }



  }

}

出力:

executing requestPOST http://10.40.xx.xx:8080/names.nsf?Login HTTP/1.1
---------------OKAY OKAY-------------------------
RESPONSE CODE 200
Response content length: 4256
4

2 に答える 2

1

Narasimha、@Richard が指摘したように、投稿時にリクエストにセッション ID がありません。サーバーはそれを新しいリクエストと見なし、ログイン ページを提供します。

この問題を回避するには、実際にログイン リクエストを送信する前に、サイトに少なくとも 1 回アクセスする必要があります。そのためのログインページをリクエストできます。

投稿リクエストを実行する前に、次のコードを挿入します。

HttpMethod method = new GetMethod("http://10.40.xx.xx:8080/names.nsf?Login");
httpclient.executeMethod(method);

これにより、後続のリクエストで渡されるセッション ID が作成されます。

于 2012-09-25T12:14:49.280 に答える
1

セッション認証のセットアップが完了しました。しかし、デフォルトの getCredentialsProvider を介して基本認証を行おうとしています。取得している 200 応答は、POST することになっている実際のセッション認証ログイン フォームです。

正しい順番は

  • ログインしているデータベースの URL で GET を実行します。
  • サーバーのログイン フォームを応答として 200 を受け取る
  • フォーム データのユーザー名とパスワードの名前と値のペアを入力し、POST します。

理論的には、Domino セッション認証フォームに合わせて調整された CredentialsProvider インターフェースを実装する独自のクラスを作成し、AbstractHttpClient を拡張する独自の DominoHttpClient クラスでそれを使用して、このシーケンスをきれいに実装する必要があります。しかし、その努力に本当に価値があるとは思いません。

于 2012-09-25T10:08:00.607 に答える