1

我在 xpage (xagent) 中的 afterRenderReponse 事件中有代码,用于建立与 Domino 数据服务的连接并将结果 (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>

任何信息将不胜感激!谢谢 !

最好的问候,Petter Kjeilen

4

2 回答 2

2

如果用户已通过身份验证并且您在服务器上使用会话身份验证,则可以从用户读取会话 cookie 并将相同的 cookie 与后续 (GET) 请求一起传递。

根据 Domino 服务器上会话认证的配置方式,您正在寻找DomAuthSessionIdLTPAToken cookie。查看页面上的答案以获取有关如何读取 cookie 并将它们与其他请求一起发送的示例(“维护会话”部分)。

于 2012-11-21T08:25:31.137 回答
0

不要使用 HTTP URL 连接!太头疼了。使用 Apache HTTP 客户端。这些类位于 Domino 服务器上。以此为参考点如何使用它。

于 2012-11-21T04:53:23.760 回答