我在xpage(xagent)的afterRenderReponse事件中具有代码,用于与Domino数据服务建立连接,并将结果(json)返回给作用域变量。
对包含xpage的数据库的匿名访问是No Access,因此用户将必须登录。
问题是,在代码中调用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>
任何信息将不胜感激!谢谢!
最好的问候,佩特·凯琳[]
我在xpage(xagent)中的afterRenderReponse事件中具有代码,用于与Domino数据服务建立连接,并将结果(json)返回给作用域变量。匿名访问...
如果用户通过了身份验证,并且您正在服务器上使用会话身份验证,则可以从用户读取会话cookie,并将相同的cookie与后续的(GET)请求一起传递。
请勿使用HTTP URL连接!太头痛了。使用Apache HTTP客户端。这些类在Domino服务器上。将this用作参考点。