Session 我希望我的dominoservlet获得一个经过身份验证的用户会话

Session 我希望我的dominoservlet获得一个经过身份验证的用户会话,session,servlets,xpages,lotus-domino,xpages-extlib,Session,Servlets,Xpages,Lotus Domino,Xpages Extlib,这似乎是一个非常基本的问题,在Domino上托管的正在运行的Servlet中,我希望访问使用IBM Notes和Domino非常好的安全性明智地保护的Domino资源 我希望Servlet能够读写数据到Domino,同时从调用Servlet(或xAgent)的客户端保留数据,并防止客户端直接写入 我很高兴能够获得一个代表应用程序签名者的会话。我可以通过使用?open&login调用Servlet并登录来为注册用户获取会话。那不实际 我已经看过了:Mark Leusink()暗示可以使用ExtLi

这似乎是一个非常基本的问题,在Domino上托管的正在运行的Servlet中,我希望访问使用IBM Notes和Domino非常好的安全性明智地保护的Domino资源

我希望Servlet能够读写数据到Domino,同时从调用Servlet(或xAgent)的客户端保留数据,并防止客户端直接写入

我很高兴能够获得一个代表应用程序签名者的会话。我可以通过使用?open&login调用Servlet并登录来为注册用户获取会话。那不实际

我已经看过了:Mark Leusink()暗示可以使用ExtLib的getCurrentSessionAsSigner()的地方。我已经尝试过了,用一个用户id对整个应用程序进行签名,但它不返回会话。答案似乎在于Servlet无法获取FacesContext对象


我觉得答案应该是显而易见的,但对我来说不是。有什么想法吗?

FacesContext
是JSF的东西,可以从XAgent(=XPage)使用

在servlet中,您可以执行以下操作:

Session session = NotesFactory.createSession(null, "user", "password");
服务器ID通常没有密码,执行此操作将使用服务器ID:

Session session = NotesFactory.createSession();

com.ibm.domino.osgi.core.context.ContextInfo.getUserSession()

Jason-我假设您基本上想要的功能与运行Web查询保存代理时所获得的功能相同,如果您没有选择“以Web用户所选的方式运行”,换句话说,作为代码的签名者

您可以尝试设置一个internet站点规则,以允许对您要使用的特定应用程序路径进行基本身份验证—为此,可能值得使用子域

然后在Servlet中调用此URL,同时设置基本授权参数(用户名和密码)

像这样的

URL url = new URL(URL_TO_CALL);
String authStr = "USERNAME:PASSWORD";
String authEncoded = Base64.encodeBytes(authStr.getBytes());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setRequestProperty("Authorization", "Basic " + authEncoded);
InputStream is = connection.getInputStream();

检查OpenNTF上WebDav项目的源代码。它包含了您所需的所有代码

对于最初的问题,有很多很好的答案。非常感谢

我建议使用的解决方案是将代码移植到OSGi插件。NSF上下文中的java代码/servlet似乎受到安全控制的约束,当相同的代码在OSGi上下文中运行时,这些安全控制会放松。守则:

try {
NotesThread.sinitThread();
Session s = NotesFactory.createSession("","<my username>","<my password>");
.....
session = null;
} catch (Exception e) {
} finally {
NotesThread.stermThread();
}
试试看{
NotesThread.sinitThread();
会话s=NotesFactory.createSession(“,”,“);
.....
会话=空;
}捕获(例外e){
}最后{
NotesThread.stermThread();
}

在OSGI环境下运行良好,但在NSF产品中运行良好

谢谢您的建议。我考虑过NotesFactory,它会要求我建立感觉有点过时的DIIOP(我没有证据表明它已经存在了一段时间,我不确定它的使用范围有多广)。我可能得试一下,看看是否会引起任何问题。再次感谢:-)如果是同一台机器,你会需要DIIOP吗?我以为DIIOP只用于远程控制access@JasonHook如果在Domino服务器上运行代码,则不需要CORBA/IIOPfunc打印effectiveUserName&这会引发java.lang.NoClassDefFoundError:com.ibm.designer.domino.napi.NotesAPIException.Error如果我将封装包放在/jvm/lib/ext目录中,则会将Msg替换为另一个错误,似乎表明在抛出异常类(错误:-)后,由于未解析异常类而导致的错误应该作为OSGi插件部署Servlet?该函数不接受任何参数我猜它或者假设用户已经通过身份验证/返回Servlet/应用程序的匿名/签名者?请参阅