2013-02-08 92 views
2

在托管在Domino上的正在运行的Servlet中,它似乎是一个非常基本的问题我想访问我使用IBM Notes非常好的安全性进行明智保护的Domino资源和Domino。我希望我的Domino Servlet能够获得经过验证的用户会话

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

我很高兴能够获得代表应用程序签名者的会话。我可以通过打开&登录和登录来调用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()。我试过了,用一个用户标识签署了整个应用程序,并且它不返回会话。答案似乎在于Servlet无法获得FacesContext对象。

这感觉就像答案应该是显而易见的,但它不是我。有任何想法吗?

回答

2

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

在servlet中,你可以这样做:

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

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

Session session = NotesFactory.createSession(); 
+0

谢谢你的建议。我曾考虑过NotesFactory,它会要求我设置DIIOP,这感觉有点老式(我还没有证据证明它只是一段时间,我不确定它使用的范围)。我可能必须尝试一下,看看它是否会导致任何问题。 再次感谢:-) – 2013-02-08 13:22:34

+0

如果您的计算机是同一台计算机,您是否需要DIIOP?我认为DIIOP仅用于远程访问 – markbarton 2013-02-08 13:47:55

+0

@JasonHook如果您在Domino服务器上运行代码,则不需要CORBA/IIOP。 – 2013-02-08 14:41:45

0

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

+1

我将jar文件导入到我的项目中,Servlet编译得很好,并使用getUserSession()函数来打印effectiveUserName&this引发java.lang.NoClassDefFoundError: com.ibm.designer.domino.napi.NotesAPIException。 – 2013-02-08 14:00:14

+1

如果将封装程序包放在/ jvm/lib/ext目录中,错误消息被另一个错误替换,似乎表明在引发错误后未解析Exception类导致的错误:-) 应该部署Servlet作为OSGi插件? 该函数不接受参数我猜它或者假设用户已经验证过了/返回Servlet/Application的匿名/签名者? – 2013-02-08 14:00:44

+0

参见http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=Servlet%20Sample http://www.openntf.org/internal/home.nsf/project.xsp ?action = openDocument&name = MailerServlet http://www.youtube.com/watch?feature=player_embedded&v=J84dAECKots – 2013-02-08 15:07:41

0

Jason - 我假设你基本上需要与运行Web查询保存代理程序相同的功能,如果你没有选择以用户选择运行的话,换句话说s作为代码的签名者。

你可以尝试设置一个互联网网站的规则,以允许你想要使用的特定应用程序路径的基本认证 - 可能值得使用子域来做到这一点。

然后在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(); 
2

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

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

相关问题