FileNet的使用者和組依靠的是LDAP,多少情況使用的是windows2003 的。在項目中擷取賬戶和組資訊可以編碼訪問LDAP,也可以使用FileNet的介面來訪問用資訊。沒有特殊需要,直接使用FileNet介面介面即可。
在com.filenet.api.security包中提供了關於認證、授權以及使用者和組的介面。包括Realm、User、Group等。Realm可以用來查詢User和Group。以擷取使用者資訊為例代碼如下所示。
Realm realm = Factory.Realm.fetchCurrent(this.osp().getObjectStore().getConnection(), null);UserSet userSet = realm.findUsers(“shortName”, PrincipalSearchType.SUFFIX_MATCH, PrincipalSearchAttribute.SHORT_NAME, PrincipalSearchSortType.ASCENDING, 0, null); for(Iterator<?> iter = userSet.iterator();iter.hasNext();){ User user = (User)iter.next(); String dispName = user.get_DisplayName(); String email = user.get_Email();}
以上代碼的核心在realm.findUsers上,其中使用了實體類PrincipalSearchType,PrincipalSearchAttribute和PrincipalSearchSortType,它們分別用於指定尋找匹配模式、尋找的條件欄位和排序類型。這些類都在FileNet的com.filenet.api.constants包中。這樣做便於管理,也防止了使用者傳參的無效性,提高了代碼的品質。在項目中我們也經常定義一些這樣的類來儲存所需常量(包括方法參數常量、資訊提示常量、配置資訊常量等等),一個很好的應用是項目Exception統一管理中的異常代碼。不過需要注意區別常量和可能變動的資訊(往往使用設定檔xml、property等)。
上面代碼查詢過程使用的是尾綴匹配方式,而且對查詢結果進行了排序,其速度是相當慢的。但就查詢某一個使用者,我們可以直接進行精確尋找,對結果無需排序,其查詢速度大概能提高10倍以上。修改內容如下所示:
UserSet userSet = realm.findUsers (“shortName”, PrincipalSearchType.EXACT,PrincipalSearchAttribute.SHORT_NAME,PrincipalSearchSortType.NONE,0, null);
在FileNet PE方面的介面中的VWSession有fetchUserInfo(java.lang.String theName)方法能夠擷取指定shortName下的VWUserInfo,通過這個類能夠得到使用Realm方法擷取的資訊,但使用該方法查詢使用者資訊可能會存在許可權等問題致使無法完全擷取自己需要的資訊。
對於FileNet的security包還有很多重要的功能,如授權和認證,是所有系統必不可少的基礎模組。此外FileNet的組織資訊牽涉到作為輕量級目錄服務之一的LDAP協議的使用,同時此文對使用常量類和設定檔進行了簡單說明,但在項目中值得重視。