快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

用 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 (美国)





返回类别: 教程
上一教程: JAVA程序员必读:基础篇(2)面向对象编程概念
下一教程: Java 中开源的CMS系统

您可以阅读与"用 Java 访问 Domino 的对象(四)"相关的教程:
· java中的对象引用问题的再次理解
· 《Java编程思想》(第二版)第09章:持有你的对象
· 【JSF心得】JAVA的对象传递是引用传递
· 关于JAVA中的对象序列化
· Java在Domino服务器上的拓展:让Domino具备面向方面的特征
    微笑服务 优质保证 索取样品