这似乎是一个非常基本的问题,在Domino上运行的Servlet中,我希望使用IBM Notes和Domino的非常好的安全性来访问我明智地保护的Domino资源。
我希望Servlet能够向Domino读取和写入数据,同时保留来自调用Servlet(或xAgent)的客户端的数据,并防止客户端直接写入。
我很高兴能够获得代表应用程序签名者的会话。我可以通过使用?open& login和登录来调用Servlet来获取注册用户的会话。这是不切实际的。
我看过这里:How can you use SessionAsSigner in a Java Bean called from an XPage? Mark Leusink(https://stackoverflow.com/users/1177870/mark-leusink)暗示可以使用ExtLib的getCurrentSessionAsSigner()。我已经尝试过,用一个用户ID签署了整个应用程序并且它没有返回会话。答案似乎在于Servlet无法获取FacesContext对象。
这感觉答案应该是显而易见的,但这不适合我。有什么想法吗?
答案 0 :(得分:2)
FacesContext
是 JSF 的东西,可以在XAgent(= XPage)中使用。
在servlet中你可以这样做:
Session session = NotesFactory.createSession(null, "user", "password");
服务器ID通常没有密码,执行此操作将使用服务器ID:
Session session = NotesFactory.createSession();
答案 1 :(得分:2)
检查OpenNTF上的WebDav项目的来源。它包含您需要的所有代码
答案 2 :(得分:1)
对原始问题有很多好的答案。非常感谢。
我建议使用的解决方案是将我拥有的代码移植到OSGi插件。看起来NSF上下文中的java代码/ Servlet受到安全控制的约束,当相同的代码在OSGi上下文中运行时,这些安全控件被放宽。代码:
try {
NotesThread.sinitThread();
Session s = NotesFactory.createSession("","<my username>","<my password>");
.....
session = null;
} catch (Exception e) {
} finally {
NotesThread.stermThread();
}
在OSGI上下文中运行良好,但在NSF produc中运行
答案 3 :(得分:0)
com.ibm.domino.osgi.core.context.ContextInfo.getUserSession()
答案 4 :(得分:0)
杰森 - 我假设你基本上想要运行Web查询保存代理的相同功能,如果你没有选择以选择的Web用户身份运行,换句话说就是代码的签名者。
您可以尝试设置一个互联网站点规则,以允许您想要使用的特定应用程序路径的基本身份验证 - 可能值得为此使用子域。
然后在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();