用 Java 访问 Domino 的对象(四)

访问控制

客户端的程序可以得到什么存取级别取决于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 (美国)

(来源IBM官方网站)

你可能感兴趣的:(Lotus,Notes)