簡體   English   中英

XPages中的呼叫代理-登錄表單出現

[英]calling agent from XPages - login form appears

我正在通過SSJS從XPage調用代理:

importPackage(java.net);
importPackage(java.io);

var protocol = context.getUrl().getScheme();    
var host = context.getUrl().getHost();
var url = protocol + "://" + host;
var path = env["dir_path"];
var dbName = datasource["db_app_filepath"];
var agentRef = "response?OpenAgent";
var paramName = "custId";

var urlAgent = url + "/" + path + dbName + "/" + agentRef;
var agent:URL = new URL(urlAgent);
var agentConnection:URLConnection = agent.openConnection();
var inputReader:BufferedReader = new BufferedReader(new InputStreamReader(agentConnection.getInputStream()));
var res:String="";
while ((inputLine = inputReader.readLine()) != null) {
    res+=inputLine;
}
print("value form agent = " + res);

代理僅返回一個簡單的字符串:

Option Public
Option Declare

Sub Initialize
    Dim session As New NotesSession
    Dim creator As String
    creator = session.EffectiveUserName
    Print "Hello World " + creator
End Sub

但是在控制台的打印語句中,我看到顯示了登錄表單。

如果我直接在瀏覽器窗口中訪問代理,則會返回以下示例:

Hello World CN =§Unrestricted§Signer/ OU = System / O = ACME

這是我在代理中的“代表屬性運行”中設置的用戶名。

在XPage上,我已經通過身份驗證。

我應該在通話中提供憑據嗎?

代碼背后的想法是,我想檢查用戶是否沒有為某種對象創建重復條目。 這些對象(“注釋”文檔)具有“讀者”限制,因此用戶X可能看不到用戶Y的條目。

ODA為此提供了一種方法,如果您使用本機服務器會話,則它應具有訪問權限-如果服務器沒有訪問權限,則應用程序有時會遇到更大的問題。

Factory.getSession(SessionType.NATIVE).getDatabase(filePath).getView("myView").checkUnique(key, Document)

checkUnique()在視圖中獲取鍵的對象以檢查唯一性以及當前文檔。 顯然,如果用戶重新保存文檔,則該文檔在視圖中將是唯一的,因此您不希望引發錯誤。 同樣,如果可以更改鍵,則僅在創建時執行檢查也不會阻止唯一性。

如果您要通過http呼叫座席,則需要提供憑據。 您可以使用https:// username:password @ restofurl格式執行此操作。 當然,這令人頭疼。

更新驗證存儲在日志中的內容。 瀏覽器會將該語法轉換為基本Auth標頭和常規URL。 在Java中,您可能需要自己創建該標頭。 /更新

可能適合您的替代方法:由於瀏覽器已通過身份驗證,因此請使用瀏覽器中的Ajax調用來觸發代理。

如果sessionAsSigner不是您要運行的用戶,請嘗試。

當然:最好不要做代理商。 您可能有一個受管bean,它創建了自己的基於server.id的會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM