访问控制
客户端的程序可以得到什么存取级别取决于createSession 的使用方式和服务器/客户端的设置。访问控制是通过以下两种方式之一实现的:
- Domino 目录中的用户名及其 Internet 口令。 这种方式对本地调用和远程调用都可以使用。对于本地调用,所访问的必须是 Domino 服务器。
- 当前 Notes ID (Notes.ini 文件中 KeyFileName 参数所指定的 ID)
这种方式只在进行本地调用时可以使用。程序所在的计算机上有 Notes 客户端或 Domino 服务器都可以。 通过 Domino 目录访问
通过 Domino
目录访问时,所使用的代码将决定是作为匿名用户还是 Domino 目录中已有的用户来访问。NotesFactory调用中,如果只指定了主机名,或使用空字符串作为用户名和口令,将以匿名用户的身份访问服务器。例如:
Session s = NotesFactory.createSession("myhost.east.acme.com:63148");
或者:
Session s = NotesFactory.createSession("myhost.east.acme.com:63148", "", "");
要以某个 Domino 用户的身份访问服务器,需要在参数2和参数3中分别指定用户名和 Internet 口令。用户名和口令必须与 Domino 目录中的某个个人文档匹配。例如:
Session s = NotesFactory.createSession("myhost.east.acme.com:63148", "Jane Smith/East/Acme",
"topS3cr3t");
对 Domino 服务器进行本地调用时,主机名应为空: Session s = NotesFactory.createSession("", "Jane Smith/East/Acme", "topS3cr3t") 要进行匿名的本地调用,三个参数都应为空:
Session s = NotesFactory.createSession("", "", "")
进行本地调用时,服务器不一定要运行。 服务器文档中的设置决定了是否可以进行匿名或用户名/口令的访问。在服务器文档中,"端口"-"Internet 端口"-"DIIOP"标签下,验证选项与代码的关系如下表:
|
对于名称和口令验证,名称必须是 Domino 目录中某个个人文档中的用户名,口令必须是此个人文档中的 Internet 口令。管理员还可以将"强制使用服务器访问设置"选项设为"是",以强制 DIIOP 的访问遵循服务器文档的安全性标签下的"服务器访问"设置。
服务器文档中的以下域可以用来控制 Internet 会话的安全性。从本质上来说,本地或远程 Java 类创建的Internet 会话的访问权限等同于 Web 用户。
|
* 哪些方法是受限制的请参考 Domino 6 Designer Help 中的"Restricted LotusScript and Java agent operations" 。
服务器文档中"端口"-"Internet 端口"下,DIIOP 标签中的域的说明如下表:
|
以下notes.ini参数也会影响远程或本地Java 类建立的Internet会话的安全性:
|
注意在数据库的存取控制表中,"Internet 用户的最大权限"设置也会对 Internet 会话的权限产生影响,DIIOP 的登录用户的权限不能超过此项设置。
服务器大约每一个半小时刷新一次安全性的缓存。修改了安全性设置后,可以使用控制台命令"tell diiop refresh"来强制刷新。
通过 Notes ID 访问
要通过当前 Notes ID 访问服务器,在调用时应不指定任何参数:
Session s = NotesFactory.createSession()
在这种情况下,如果需要验证(如打开数据库时),会弹出一个对话框,提示输入Notes ID的口令。所使用的Notes ID是在搜索路径中能找到的第一个Notes.ini文件中,KeyFileName变量指定的。例如,Notes.ini 中有以下参数时,程序将使用 admin.id 来访问服务器:
KeyFileName=admin.id
必须输入该ID的口令,或按"取消",程序才能继续执行。 也可以将第二个参数指定为"(String)null",在第三个参数中指定该Notes ID的口令:
Session s = NotesFactory.createSession((String)null, (String)null, "tops3cr3t")
在服务器上,以上方法会按读者域限制访问,要进行完全的访问,可以用以下方法:
Session s = NotesFactory.createSessionWithFullAccess()
或者
Session s = NotesFactory.createSessionWithFullAccess("tops3cr3t")
结论
您现在了解了用Java应用程序对Domino对象进行本地调用和远程调用的基本方法。关于较复杂的访问方式,如SSL加密,servlet,连接池,单一登录,防火墙,超时控制,资源回收及问题诊断,请参考以下文章:
http://www-10.lotus.com/ldd/today.nsf/lookup/Java_access_2 (美国)
(来源IBM官方网站)