2

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

我希望 Servlet 能够在 Domino 中读取和写入数据,同时保留来自调用 Servlet(或 xAgent)的客户端的数据,并防止客户端直接写入。

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

我看过这里:如何在从 XPage 调用的 Java Bean 中使用 SessionAsSigner?其中 Mark Leusink ( https://stackoverflow.com/users/1177870/mark-leusink ) 暗示可以使用 ExtLib 的 getCurrentSessionAsSigner()。我已经尝试过了,使用单个用户 ID 对整个应用程序进行了签名,并且它不返回会话。答案似乎在于 Servlet 无法获取 FacesContext 对象。

感觉答案应该很明显,但对我来说不是。有任何想法吗?

4

5 回答 5

2

FacesContextJSF的东西,可以从 XAgent (=XPage) 中使用。

在 servlet 中,您可以这样做:

Session session = NotesFactory.createSession(null, "user", "password");

服务器 ID 通常没有密码,这样做将使用服务器 ID:

Session session = NotesFactory.createSession();
于 2013-02-08T11:50:42.027 回答
2

检查 OpenNTF 上的 WebDav 项目的源代码。它有你需要的所有代码

于 2013-02-08T16:10:10.530 回答
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 产品中运行

于 2013-02-11T16:03:21.110 回答
0

Jason - 我假设您基本上想要与运行 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();
于 2013-02-08T14:07:18.570 回答
0

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

于 2013-02-08T12:04:28.933 回答