我正在通过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的条目。
答案 0 :(得分:3)
ODA有一个用于此目的的方法,如果您使用本机服务器会话,则它应该具有访问权限-如果服务器没有访问权限,则应用程序有时会遇到更大的问题。
push
$('ul > li > span').click(function() {
indToCookie = $('ul > li > span').index(this);
$.cookie('nav-item', indToCookie);
valCookie = $.cookie('nav-item');
indArray.push(valCookie); // <-- add this line
});
使用视图中一个或多个键的对象来检查唯一性以及当前文档。显然,如果用户重新保存文档,则该文档在视图中将是唯一的,因此您不希望引发错误。同样,如果可以更改键,则仅在创建时执行检查也不会阻止唯一性。
答案 1 :(得分:0)
如果您想通过http呼叫座席,则需要提供凭据。您可以使用https://username:password@restofurl格式执行此操作。当然,这令人头疼。
更新 验证存储在日志中的内容。浏览器会将该语法转换为基本Auth标头和常规URL。在Java中,您可能需要自己创建该标头。 /更新
可能对您有用的替代方法:由于浏览器已通过身份验证,因此请使用浏览器中的Ajax调用来触发代理。
如果不是sessionAsSigner
的用户,请尝试。
当然:最好不要做代理。您可能有一个受管bean,它创建了自己的基于server.id的会话。