本文將向 Java 編程人員介紹 Domino Objects,并講述本地訪問和遠(yuǎn)程訪問的一些基本知識,然后將介紹訪問控制。本文的重點(diǎn)是開發(fā) Java 應(yīng)用程序。
如果沒有本文中講述的一些基本知識,從 Java 轉(zhuǎn)向 Domino Objects 可能會比較困難。不僅代碼必須準(zhǔn)確,而且客戶機(jī)和服務(wù)器環(huán)境也必須準(zhǔn)確。本文首先將介紹本地訪問和遠(yuǎn)程訪問的一些基本知識,然后說明訪問控制。本文的重點(diǎn)是 Java 應(yīng)用程序。在接下來的續(xù)篇中,我們將討論 SSL 加密、servlet、連接池、單點(diǎn)登錄、防火墻、超時(shí)和回收,而且還包括故障檢修部分。本文假設(shè)您熟悉 Domino Java API。
Java 對 Domino Objects 的訪問是通過高級包 lotus.domino 進(jìn)行的。根據(jù)運(yùn)行時(shí)環(huán)境,這個(gè)包中的接口是在其他兩個(gè)包中的一個(gè)包中實(shí)現(xiàn)的: lotus.domino.local 提供了從同一計(jì)算機(jī)上的 Notes/Domino 軟件進(jìn)行調(diào)用。 lotus.domino.cso 提供了從通過遠(yuǎn)程連接訪問的 Domino 服務(wù)器進(jìn)行調(diào)用。
對于本地訪問,Java 程序運(yùn)行在安裝有 Notes 客戶機(jī)或者 Domino 服務(wù)器的計(jì)算機(jī)上。本地類由 JNI(Java Native Interface)構(gòu)建來,用于訪問與 JVM(Java Virtual Machine)相同的進(jìn)程中的 Notes/Domino 二進(jìn)制文件。
對于遠(yuǎn)程訪問,Java 程序使用 CORBA(Common Object Request Broker Architecture)請求 Domino 服務(wù)器所提供的服務(wù)。遠(yuǎn)程類使用 CORBA 通過 TCP/IP 網(wǎng)絡(luò)訪問服務(wù)器。遠(yuǎn)程訪問由以下兩個(gè)部分組成: 客戶機(jī)通過 HTTP 協(xié)議獲得服務(wù)器的初始對象,作為 IOR (Interoperable Object Reference)。 客戶機(jī)通過 IIOP 連接進(jìn)一步獲得其他對象。
在 lotus.domino 中,NotesFactory 類提供了 createSession 和其他方法,以便在 Java 應(yīng)用程序和 servlet 中啟用對 Domino Objects 的訪問。特殊的調(diào)用方式確定了訪問是本地還是遠(yuǎn)程的。
要編譯使用 lotus.domino 包的 Java 程序,類路徑必須包含 Notes.jar(本地)或者 NCSO.jar(遠(yuǎn)程)。例如:
set classpath=%classpath%;c:\lotus\domino\Notes.jar
或者
set classpath=%classpath%;c:\lotus\domino\data\domino\java\NCSO.jar
其中 Notes.jar 可以在任何 Notes/Domino 安裝的程序目錄中找到。NCSO.jar 可以在 Domino Designer 或 Domino 服務(wù)器數(shù)據(jù)目錄下的 domino\java 目錄中找到。
createSession 的調(diào)用沒有參數(shù),第一個(gè)參數(shù)為 null 或者第一個(gè)參數(shù)為空字符串都表示本地調(diào)用。下列代碼是等價(jià)的:
Session s = NotesFactory.createSession()Session s = NotesFactory.createSession((String)null)Session s = NotesFactory.createSession("")
將 null 轉(zhuǎn)換成 String,以避免過載沖突。
要從應(yīng)用程序和 servlet 中實(shí)現(xiàn)本地調(diào)用,路徑中必須包含 Notes/Domino 的程序目錄,類路徑中必須包含 Notes/Domino 程序目錄中的 Notes.jar。例如:
set path := %path%;c:\lotus\domino
set classpath := %classpath%;c:\lotus\domino\Notes.jar
Notes.jar 中包含 lotus.domino 和 lotus.domino.loca 包。
本地調(diào)用需要用 NotesThread 類管理線程。NotesThread 類擴(kuò)展了 java.lang.Thread,包含專門針對 Domino 的初始化和終止代碼。您有以下三種選擇: 通過繼承來執(zhí)行線程。 通過 Runnable 接口來執(zhí)行線程。 通過靜態(tài)方法來執(zhí)行線程。
要通過繼承來執(zhí)行線程,需要擴(kuò)展 NotesThread,而不是 Thread,并且需要包含 runNotes 方法,而不是 run 方法。NotesThread 線程可以和任何其他線程一樣通過 start 方法來啟動。這種方式比靜態(tài)方法(稍后討論)容易使用,且不易出錯(cuò)。
import lotus.domino.*;public class myClass extends NotesThread{ public static void main(String argv[]) { myClass t = new myClass(); t.start(); } public void runNotes() // entry point for Notes thread { try { Session s = NotesFactory.createSession(); // Operational code goes here } catch (Exception e) { e.printStackTrace(); } }}
要通過 Runnable 接口來執(zhí)行線程,需要實(shí)現(xiàn) Runnable 并包含 run 方法,這與使用線程的任何類相同。當(dāng)您因?yàn)檎跀U(kuò)展其他類而不能擴(kuò)展 NotesThread 時(shí),可以使用這種方式。
import lotus.domino.*;public class myClass implements Runnable{ public static void main(String argv[]) { myClass t = new myClass(); NotesThread nt = new NotesThread((Runnable)t); nt.start(); } public void run() // entry point for thread { try { Session s = NotesFactory.createSession(); // Operational code goes here } catch (Exception e) { e.printStackTrace(); } } }
要通過靜態(tài)方法來執(zhí)行線程,需要調(diào)用 sinitThread() 來初始化線程,調(diào)用 stermThread() 來終止線程。stermThread() 的調(diào)用必須與 sinitThread() 的調(diào)用嚴(yán)格一一對應(yīng);推薦將 stermThread 放在“finally”程序塊里。靜態(tài)方法適用于不可能進(jìn)行繼承的線程,或者適用于需要更好地控制基于事件的線程。
import lotus.domino.*;public class myClass{ public static void main(String argv[]) { try { NotesThread.sinitThread(); // start thread Session s = NotesFactory.createSession(); // Operational code goes here } catch(Exception e) { e.printStackTrace(); } finally { NotesThread.stermThread(); // must terminate every thread } } }
進(jìn)行本地調(diào)用的每個(gè)應(yīng)用程序的線程都必須初始化一個(gè) NotesThread 對象。它包含了訪問 Domino Objects 的 AWT 線程。監(jiān)聽器線程必須使用靜態(tài)方法,因?yàn)闊o法從 NotesThread 中繼承它們。
既進(jìn)行本地調(diào)用又進(jìn)行遠(yuǎn)程調(diào)用的應(yīng)用程序可以動態(tài)地決定何時(shí)使用靜態(tài)方法 sinitThread 和 stermThread。運(yùn)行本地線程時(shí),也可以進(jìn)行遠(yuǎn)程調(diào)用;但不要將通過一個(gè)會話獲得的對象用于對其他會話的調(diào)用。
應(yīng)該避免使用多線程,除非有非常充分的理由,比如處理文件輸入/輸出和 Web 請求時(shí),要繼續(xù)進(jìn)行操作。觀察遵循以下指導(dǎo)原則: 在同一會話中,可以跨線程共享、同步和回收 Domino Objects。如果每個(gè)線程使用不同的會話,那么就會失去這些功能;必須明確地在每個(gè)線程的基礎(chǔ)上管理同步和回收。 不要跨線程使用 DbDirectory。 允許在多線程中訪問現(xiàn)有文檔,但只在一個(gè)線程中進(jìn)行訪問文檔將簡化內(nèi)存管理。將訪問限制在一個(gè)線程,這樣就可以不檢查其他線程直接進(jìn)行回收。跨線程創(chuàng)建文檔始終是安全的,并且這些對象可以不管其他線程就進(jìn)行回收。 配置文件文檔是基于每個(gè)線程進(jìn)行緩存的。如果出現(xiàn)更新競爭,那么將保留最后一個(gè)線程的更新。 注意不要刪除其他線程中通過視圖或集合進(jìn)行導(dǎo)航所需的文檔。 當(dāng)子對象被用于其父對象之外的其他線程時(shí),父線程要等所有子線程都結(jié)束后才能結(jié)束。當(dāng)在 AWT 事件處理程序中使用 Domino Objects 時(shí),這一點(diǎn)尤其重要。
在進(jìn)行遠(yuǎn)程調(diào)用時(shí),createSession 簽名的第一個(gè)參數(shù)是非空字符串。第一個(gè)參數(shù)通常用來標(biāo)識 Domino 服務(wù)器所在的計(jì)算機(jī)。例如:
Session s = NotesFactory.createSession("myhost.east.acme.com")
或者
Session s = NotesFactory.createSession("myhost.east.acme.com:63148")
第二個(gè)示例指定了端口號,這樣就無需在 myhost.east.acme.com 上運(yùn)行 Domino Web 服務(wù)器。有關(guān)的詳細(xì)信息,請參閱本文后面的“獲取 IOR”部分。
要從應(yīng)用程序或者 servlet 執(zhí)行遠(yuǎn)程調(diào)用,客戶機(jī)計(jì)算機(jī)的類路徑中必須包含 NCSO.jar。NCSO.jar 包含 lotus.domino 包、lotus.domino.cso 包、lotus.domino.corba 包以及 ORB 類,ORB 類包含用于遠(yuǎn)程類的實(shí)現(xiàn)代碼。對于已安裝的 Domino Designer 和 Domino 服務(wù)器軟件,NCSO.jar 位于 Domino 數(shù)據(jù)目錄下的 domino\java 子目錄中。對于沒有安裝 Domino 軟件的計(jì)算機(jī),必須從安裝該軟件的計(jì)算機(jī)上復(fù)制歸檔文件。
類路徑必須包含歸檔文件,例如:
set classpath := %classpath%;c:\lotus\domino\data\domino\java\NCSO.jar
編碼比較簡單。遠(yuǎn)程調(diào)用不使用 NotesThread。只需使用主機(jī)名稱和(可選)端口號進(jìn)行 createSession 調(diào)用即可。
不使用線程時(shí),模板將如下所示:
import lotus.domino.*;public class myClass{ public static void main(String argv[]) { try { String host = "myhost.east.acme.com:63148"; Session s = NotesFactory.createSession(host); // Operational code goes here } catch(Exception e) { e.printStackTrace(); } } }
下列模板將使用線程:
import lotus.domino.*;public class myClass implements Runnable{ public static void main(String argv[]) { myClass t = new myClass(); Thread nt = new Thread((Runnable)t); nt.start(); } public void run() { try { String host = "myhost.east.acme.com:63148"; Session s = NotesFactory.createSession(host); // Operational code goes here } catch(Exception e) { e.printStackTrace(); } } }
遠(yuǎn)程訪問還需要設(shè)置 Domino 服務(wù)器和進(jìn)行 TCP/IP 連接。安裝服務(wù)器的計(jì)算機(jī)必須能夠通過 TCP/IP 進(jìn)行訪問。在計(jì)算機(jī)的網(wǎng)絡(luò)設(shè)置中,需要檢查 TCP/IP 屬性中的主機(jī)和域名的 DNS 配置。必須能夠用 Internet 名稱從客戶機(jī)計(jì)算機(jī) ping 到服務(wù)器計(jì)算機(jī)。例如,如果 Domino 服務(wù)器的主機(jī)名稱是 myhost,那么域名將是 east.acme.co:
下列命令應(yīng)該得到客戶機(jī)計(jì)算機(jī)的有效響應(yīng):
> ping myhost.east.acme.com
在服務(wù)器 Domino Directory(names.nsf)的 Server 文檔 Bsiscs 選項(xiàng)卡的“Fully qualified Internet host name”字段中,必須顯示主機(jī)和域。通常,安裝服務(wù)器安裝時(shí)已設(shè)置了主機(jī)名,例如:
如前面的編碼示例所示,Internet 名稱是 createSession 主機(jī)的(第一個(gè))參數(shù)。也可以使用服務(wù)器的 IP 地址。例如,如果 myhost.east.acme.com 的 IP 地址是 9.95.73.30,那么下列任何一個(gè)調(diào)用都有效:
Session s = NotesFactory.createSession("myhost.east.acme.com:63148")
或者
Session s = NotesFactory.createSession("9.95.73.30:63148")
必須運(yùn)行服務(wù)器上的 DIIOP(Domino IIOP)任務(wù)。HTTP 任務(wù)可能也需要運(yùn)行,這取決于如何獲取 IOR。檢查 Domino Directory 中 Server 文檔。轉(zhuǎn)至 Ports 選項(xiàng)卡,然后轉(zhuǎn)向 Internet Ports 選項(xiàng)卡。查看 Web 選項(xiàng)卡(用于 HTTP)并找到 DIIOP 選項(xiàng)卡。這些部分有用于指定端口號以及啟用/禁用端口的字段。通常,HTTP 的端口號是 80,DIIOP 的端口號是 63148。下列屏幕顯示了 DIIOP 選項(xiàng)卡:
如果訪問數(shù)據(jù)庫時(shí)不知道文件名稱(例如,要使用 DbDirectory.getFirstDatabase),那么必須允許通過網(wǎng)絡(luò)瀏覽文件名。轉(zhuǎn)至 Internet Protocols 選項(xiàng)卡、HHTP 選項(xiàng)卡和 R5 Basics 選項(xiàng)卡。然后將“Allow HTTP clients to browse databases”設(shè)為 Yes。
要在服務(wù)器上啟動 HTTP 和 DIIOP 任務(wù),需要確保這些任務(wù)在 Notes.ini 文件 ServerTasks 變量的任務(wù)列表中,如果正確配置了 Server 文檔該文件,那么這些任務(wù)應(yīng)該包含在任務(wù)列表中。Notes.ini 文件應(yīng)該包含類似于下面的行:
ServerTasks=Update,Replica,Router,AMgr, AdminP,CalConn,Sched,DIIOP,HTTP,LDAP
從運(yùn)行的服務(wù)器,可以在控制臺中輸入下列命令來加載任務(wù):
> load http > load diiop
可以在控制臺用 tell 命令停止任務(wù):
> tell http quit > tell diiop quit
可以刷新 DIIOP 任務(wù):
> tell diiop refresh
可以重新啟動 HTTP 任務(wù):
> tell http restart
在 Domino 服務(wù)器上,IOR 是一個(gè)名為 diiop_ior.txt 的文件,位于 Domino 數(shù)據(jù)目錄下的 domino\html 子目錄中。IOR 是對象的字符串編碼,包含對服務(wù)器的 CORBA 訪問的識別信息。客戶機(jī)會將字符串 IOR 解碼,并用它來建立遠(yuǎn)程會話。
默認(rèn)情況下,遠(yuǎn)程客戶機(jī)通過 Web 服務(wù)器端口(其通常支持 HTTP 請求)來請求服務(wù)器 IOR,然后通過 DIIOP 端口進(jìn)行會話請求??梢苑謩e執(zhí)行這兩個(gè)請求。例如:
String ior = NotesFactory.getIOR("myhost.east.acme.com"); // Get IOR using Web server portSession s = NotesFactory.createSessionWithIOR(ior); // Create session using DIIOP port
等價(jià)于:
Session s = NotesFactory.createSession("myhost.east.acme.com");
在 NotesFactory 調(diào)用中,可以在主機(jī)名稱或 IP 地址后面添加冒號和端口號,來指定用于獲取 IOR 的主機(jī)端口。如果 Web 服務(wù)器沒有運(yùn)行,可以使用這種機(jī)制,通過 DIIOP 端口支持 IOR 的 HTTP 請求,例如:
String ior = NotesFactory.getIOR("myhost.east.acme.com:63148"); // Get IOR using DIIOP portSession s = NotesFactory.createSessionWithIOR(ior); // Create session using DIIOP port
然而,兩步式編碼順序并不是必需的。可以將其簡化為:
Session s = NotesFactory.createSession("myhost.east.acme.com:63148");
不能用 DIIOP 端口獲取除 diiop_ior.txt 之外的文本文件。
如果通過 Web 服務(wù)器端口來獲取 IOR,Web 服務(wù)器端口,那么必須允許進(jìn)行匿名訪問。在 Domino Directory 的 Server 文檔中,轉(zhuǎn)至 Ports 選項(xiàng)卡,然后轉(zhuǎn)至 Web 選項(xiàng)卡。確保 Authentication options 下的 Anonymous 字段被設(shè)為 Yes。
指定 DIIOP 端口來獲取 IOR 的能力是 Notes/Domino 6 的新功能?,F(xiàn)在就可以使用遠(yuǎn)程調(diào)用,無需允許對 Web 服務(wù)器的匿名訪問,甚至無需啟動 Web 服務(wù)器。
也可以通過其他方法獲取 IOR,然后使用 createSessionWithIOR。例如,可以將 diiop_ior.txt 文件從服務(wù)器計(jì)算機(jī)復(fù)制到客戶機(jī)計(jì)算機(jī)上。如果客戶機(jī)上包含對將使用的服務(wù)器有效的 diiop_ior.txt 文件,那么可以使用下列代碼:
import lotus.domino.*;import java.io.*;public class platformior{ public static void main(String argv[]) { try { FileInputStream fin = new FileInputStream( "c:\\Lotus\\NotesR6\\diiop_ior.txt"); InputStreamReader fisr = new InputStreamReader(fin); BufferedReader br = new BufferedReader(fisr); String ior = br.readLine(); fin.close(); Session s = NotesFactory.createSessionWithIOR(ior); //Operational code goes here } catch(Exception e) { e.printStackTrace(); } } }
注意 IOR 設(shè)置可能會失效。服務(wù)器上的以下任何更改都會使客戶機(jī)上的 diiop_ior.txt 文件失效: 更改 DIIOP 端口號。 啟用或禁用 DIIOP 端口。 更改 TCP/IP 地址。
可以通過指定服務(wù)器主機(jī)名稱而不是服務(wù)器的 TCP/IP 地址來避免最后一項(xiàng)。在 Server 文檔中,轉(zhuǎn)至 Internet Protocols 選項(xiàng)卡,然后轉(zhuǎn)至 DIIOP 選項(xiàng)卡。在“Host name/Address”字段中指定服務(wù)器的 Internet 主機(jī)名。
這將強(qiáng)制 diiop_ior.txt 使用服務(wù)器的主機(jī)名而不是使用 IP 地址。也可以通過 Notes.ini 變量 DIIOPIORHost 來強(qiáng)制使用主機(jī)名。
授予用戶的對客戶機(jī)上 Domino 服務(wù)器或者 Notes/Domino 軟件的訪問級別取決于 createSession 如何進(jìn)行編碼以及服務(wù)器或者客戶機(jī)的設(shè)置。
訪問控制是通過以下兩種方式之一實(shí)現(xiàn)的: Domino Directory 中的名稱和相關(guān) Internet 密碼
這種方式用于本地或者遠(yuǎn)程訪問。對于本地訪問,運(yùn)行代碼的計(jì)算機(jī)必須配置為 Domino 服務(wù)器。 當(dāng)前 Notes ID(由 Notes.ini 中的 KeyFileName 變量指定)
這種方式僅用于本地調(diào)用。運(yùn)行代碼的計(jì)算機(jī)可以包含 Notes 客戶機(jī)或者 Domino 服務(wù)器。
對于通過 Domino Directory 訪問,代碼將確定用戶是以 Anonymous 匿名訪問服務(wù)器,還是作為 Domino Directory 中列出的用戶來訪問服務(wù)器。在 NotesFactory 調(diào)用中,如果僅指定了主機(jī)名稱,或指定了空字符串作為用戶名和密碼,那么將以 Anonymous 訪問服務(wù)器。例如:
Session s = NotesFactory.createSession("myhost.east.acme.com:63148");
或者
Session s = NotesFactory.createSession("myhost.east.acme.com:63148", "", "");
要以 Domino 用戶訪問服務(wù)器,需要指定用戶名和 Internet 密碼作為參數(shù) 2 和參數(shù) 3。用戶名和密碼必須與服務(wù)器上 Domino Directory 中的 Person 文檔匹配,例如:
Session s = NotesFactory.createSession("myhost.east.acme.com:63148", "Jane Smith/East/Acme", "topS3cr3t");
如果對運(yùn)行代碼的計(jì)算機(jī)上安裝的 Domino 服務(wù)器進(jìn)行本地訪問,需要指定主機(jī)名稱為空字符串,例如:
Session s = NotesFactory.createSession("", "Jane Smith/East/Acme", "topS3cr3t")
對于 Anonymous 訪問,需要指定用戶名和密碼為空字符串:
Session s = NotesFactory.createSession("", "", "")
對于本地訪問,則不必運(yùn)行服務(wù)器。
Domino Directory 的 Server 文檔中的設(shè)置控制著是 Anonymous 訪問還是命名訪問。在 Server 文檔中,轉(zhuǎn)至 Ports 選項(xiàng)卡、Internet Ports 選項(xiàng)卡和 DIIOP 選項(xiàng)卡。下表指定了設(shè)置:
客戶機(jī)代碼 Authentication options
createSession(host, "", "")Anonymous 必須為 Yes,以便訪問服務(wù)器
createSession(host, name, password)Name & password 必須為 Yes,以便訪問服務(wù)器
對于 Name & password 驗(yàn)證,名稱必須是服務(wù)器上 Domino Directory 中 Person 文檔中的用戶名,密碼必須是同一 Person 文檔中的 Internet 密碼??梢赃M(jìn)一步限制訪問,方法是在 Domino Directory 的 Server 文檔中,在 Ports 選項(xiàng)卡和 Internet Ports 選項(xiàng)卡下,將 Enforce server access settings 字段設(shè)為 Yes,以便使用 DIIOP 端口。然后在 Security 選項(xiàng)卡下的 Server Access 選項(xiàng)卡中指定希望的訪問。
Server 文檔包含下列字段,用于控制由遠(yuǎn)程或本地 Java 類創(chuàng)建的 Internet 會話的安全性。在 createSession 使用用戶名和密碼或 SSO 令牌時(shí),Internet 會話的訪問權(quán)限等同于 Web 用戶。下表列出了 Security 選項(xiàng)卡中的字段。
字段 備注
Security settings
Access server要通過遠(yuǎn)程或本地 Internet 會話訪問服務(wù)器,則您必須位于該列表中
Not access server如果您在該列表中,則不能進(jìn)行遠(yuǎn)程或本地 Internet 會話
Create databases & templates允許通過后端方法創(chuàng)建新數(shù)據(jù)庫和模板
Create new replicas允許通過后端方法創(chuàng)建數(shù)據(jù)庫副本
Create master templates允許通過后端方法創(chuàng)建主模板
Programmability Restrictions
Run unrestricted methods and operations此列表中顯示的后端類的用戶可以運(yùn)行有特權(quán)的 Java 方法。該設(shè)置不適用于本地 Java 操作,如在本地執(zhí)行寫入文件系統(tǒng),該操作在遠(yuǎn)程 Java 程序上執(zhí)行。(換句話說,此設(shè)置僅對 Domino 服務(wù)器訪問有影響,不阻止使用遠(yuǎn)程類的客戶機(jī)訪問本機(jī)文件系統(tǒng)中的文件。)
Sign agents to run on behalf of someone else作為 Web 用戶運(yùn)行的代理將以 Internet 會話登錄用戶的有效用戶名進(jìn)行登錄
Sign agents to run on behalf of the invoker of the agent作為 Web 用戶運(yùn)行的代理將以 Internet 會話登錄用戶的有效用戶名進(jìn)行登錄
(TCP/IP) AnonymousDIIOP 驗(yàn)證不需要名稱和密碼
(SSL) Name and PasswordDIIOP SSL 驗(yàn)證需要名稱和密碼
(SSL) AnonymousDIIOP SSL 驗(yàn)證不需要名稱和密碼
Internet Access
Internet Authentication用于 Internet 會話登錄用戶名。有關(guān)其他說明,請參閱字段幫助或者文檔
下表列出了 DIIOP 選項(xiàng)卡中的字段:
字段 備注
(TCP/IP) Name and PasswordDIIOP 驗(yàn)證需要名稱和密碼
(TCP/IP) AnonymousDIIOP 驗(yàn)證不需要名稱和密碼
(TCP/IP) Enforce server access settingsDIIOP 使用 Security 選項(xiàng)卡下的 Server Access 設(shè)置
(SSL) Name and PasswordDIIOP SSL 驗(yàn)證需要名稱和密碼
(SSL) AnonymousDIIOP SSL 驗(yàn)證不需要名稱和密碼
下列 Notes.ini 設(shè)置會影響通過遠(yuǎn)程或本地 Java 類獲得的 Internet 會話的安全性
Notes.ini 設(shè)置 描述
NoAmbiguousWebNames如果 DIIOP 登錄用戶名在 $Users 視圖中有多個(gè)匹配名稱,NoAmbiguousWebNames=1 會導(dǎo)致驗(yàn)證失敗
WebNameAuthenticWebNameAuthentic=1 會使 DIIOP 登錄名稱被視為用戶的識別名
NABWebLookupViewNABWebLookupView="xxx" 會使 Domino Directory 中的“XXX”用來搜索 DIIOP 登錄名稱
同時(shí)注意,數(shù)據(jù)庫 ACL“Maximum Internet Name and Password access”設(shè)置會影響通過遠(yuǎn)程或者本地 Java 類獲得的 Internet 會話的安全性,因?yàn)?DIIOP 登錄用戶被限制為這一訪問級別。
服務(wù)器大約半小時(shí)刷新一次安全性選項(xiàng)的緩存??刂婆_命令“tell diiop refresh”可以強(qiáng)制立即刷新。
對于通過當(dāng)前 Notes ID 的訪問,無需指定參數(shù):
Session s = NotesFactory.createSession()
在這種情況下,當(dāng)需要進(jìn)行身份驗(yàn)證時(shí)(例如,訪問數(shù)據(jù)庫),會顯示對話框,并要求輸入 Notes ID 口令。所選擇的 Notes ID 是在搜索路徑中第一個(gè) Notes.ini 文件的 KeyFileName 變量中指定的。用戶必須輸入正確的密碼或者單擊 Cancel 以繼續(xù)后續(xù)操作。
除了不指定參數(shù)外,也可以指定第二個(gè)參數(shù)為 null(轉(zhuǎn)換為 String),第三個(gè)參數(shù)為 Notes ID 的密碼:
Session s = NotesFactory.createSession((String)null, (String)null, "tops3cr3t")
在服務(wù)器上,上述方法會根據(jù) Readers 字段限制訪問。要進(jìn)行完全的訪問,可以用以下方法:
Session s = NotesFactory.createSessionWithFullAccess()
或者
Session s = NotesFactory.createSessionWithFullAccess("tops3cr3t")