访问控制
客户端的程序可以得到什么存取级别取决于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"标签下,验证选项与代码的关系如下表:
验证选项与代码的关系如下表
代码 验证选项
createSession(host, "", "")
createSession(host, name, password) 匿名必须设为"是"才能访问服务器名称和口令必须设为"是"才能访问服务器
对于名称和口令验证,名称必须是 Domino 目录中某个个人文档中的用户名,口令必须是此个人文档中的 Internet 口令。管理员还可以将"强制使用服务器访问设置"选项设为"是",以强制 DIIOP 的访问遵循服务器文档的安全性标签下的"服务器访问"设置。
服务器文档中的以下域可以用来控制 Internet 会话的安全性。从本质上来说,本地或远程 Java 类创建的Internet 会话的访问权限等同于 Web 用户。
服务器文档中的以下域可以用来控制 Internet 会话的安全性
域 说明
服务器访问权限
访问服务器 进行远程或本地调用的用户必须列在此域中
禁止访问服务器 如果用户被列在此域中,无论远程或本地连接都不能建立
创建数据库和模板 用后台方法能否创建新数据库和模板
创建新复本 用后台方法能否创建复本数据库
创建主模板 用后台方法能否创建主模板
编程限制
运行无限制的方法和操作 列在此域中的用户可以在Domino服务器上运行受限制的Java方法*。 如果程序 所使用的用户没有列在此域中,则不能在Domino服务器上执行这些方法,例如 访问Domino服务器的文件系统等,但仍可以在程序所在的计算机上执行各种方 法,包括访问本机的文件系统。
签名将代表其他人运行的代理 作为Web用户运行的代理将以Internet会话中的用户身份运行
签名将代表代理的调用者运行的代理 作为Web用户运行的代理将以Internet会话中的用户身份运行
Internet 访问
Internet 验证 限制可以使用哪些名称作为用户名来登录
* 哪些方法是受限制的请参考 Domino 6 Designer Help 中的"Restricted LotusScript and Java agent operations" 。
服务器文档中"端口"-"Internet 端口"下,DIIOP 标签中的域的说明如下表:
服务器文档中"端口"-"Internet 端口"下,DIIOP 标签中的域的说明
域 说明
(TCPI/IP)姓名和口令 DIIOP 验证要求用户名和口令
(TCP/IP)匿名 DIIOP 验证不要求用户名和口令
(SSL)姓名和口令 DIIOP SSL 验证要求用户名和口令
(SSL)匿名 DIIOP SSL 验证不要求用户名和口令
强制使用服务器访问设置 DIIOP是否强制使用安全性标签下的服务器访问设置
以下notes.ini参数也会影响远程或本地Java 类建立的Internet会话的安全性:
notes.ini参数也会影响远程或本地Java 类建立的Internet会话的安全性
Notes.ini设置 说明
NoAmbiguousWebNames NoAmbiguousWebNames=1时,如果用来登录DIIOP的用户名在$Users视图 中有多个匹配,则登录失败
WebNameAuthentic WebNameAuthentic=1时,用来登录DIIOP的用户名应该是用户的全名
NABWebLookupView 设置NABWebLookupView="xxx",则Domino将在Domino 目录的"xxx"视图中 查找用来登录的用户名
注意在数据库的存取控制表中,"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 (美国)