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>
どんな情報でも大歓迎です!ありがとう !
よろしく、 ペッター・ケイレン