1

xpage (xagent) の afterRenderReponse イベントに、Domino Data Service との接続を確立し、結果 (json) をスコープ変数に返すコードがあります。

xpage を含むデータベースへの匿名アクセスはアクセスなしであるため、ユーザーはログインする必要があります。

問題は、コードで url.openConnection() を呼び出すと、ログイン フォームが返されることです。つまり、要求された URL がそれを呼び出す xpage と同じサーバー/ドメインにある場合でも、再度認証する必要があります。

conn.setRequestProperty("Authorization", "Basic " + authStringEnc) を使用して基本認証を使用して認証できることはわかっていますが、ユーザー名とパスワード + これを base64 エンコードする必要があります。

私の質問は次のとおりです。ユーザーはすでに認証されているため、これらの資格情報を java.net.HttpURLConnection オブジェクトに「渡す」ことは可能ですか? ltpatoken Cookie へのハンドルを取得してこれを提供することは可能ですか? その他の方法で ?

    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">

        <xp:this.afterRenderResponse><![CDATA[#{javascript:// Establish connection with Domino database collection resource

try{
    var url = new java.net.URL("http://server/mydb.nsf/api/data");

    var conn:java.net.HttpURLConnection = url.openConnection();

    conn.setRequestProperty("Accept", "application/json");

    if (conn.getResponseCode() == "200") {



        // Get the response

        var reader = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream()));

        var buffer = new java.lang.StringBuffer();

        var line = "";

        while ((line = reader.readLine()) != null) {

            buffer.append(line);

        }

        reader.close();



        // Create array from response

        var jsonarray = eval('(' + buffer + ')');



        // Get filenames and titles from Domino database collection resource

        // On XPage, requestScope.status is bound to a multi-line text control

        for (var i = 0; i < jsonarray.length; i++) {

            requestScope.status += jsonarray [i].@filepath + " - " + jsonarray [i].@title + "\n";

        }



    } else { // if connection fails

        requestScope.status = conn.getResponseCode() + " " + conn.getResponseMessage();

    }  
    } catch(e){
  _dump(e);
}
    }]]></xp:this.afterRenderResponse>
    </xp:view>

どんな情報でも大歓迎です!ありがとう !

よろしく、 ペッター・ケイレン

4

2 に答える 2

2

ユーザーが認証されており、サーバーでセッション認証を使用している場合、ユーザーからセッション Cookie を読み取り、同じ Cookie を後続の (GET) 要求と共に渡すことができます。

Domino サーバーでのセッション認証の構成方法に応じて、 DomAuthSessionIdまたはLTPAToken Cookieを探しています。このページの回答を参照して、Cookie を読み取り、追加のリクエストと共に送信する方法のサンプルを確認してください (「セッションの維持」セクション)。

于 2012-11-21T08:25:31.137 に答える
0

HTTP URL 接続を使用しないでください。頭痛すぎる。Apache HTTP クライアントを使用します。クラスは Domino サーバー上にあります。使い方の参考にしてください。

于 2012-11-21T04:53:23.760 に答える