Java2平台的安全策略
以上所列的特點事實上正是Java編程語言和Java2標准版中的標准的、強有力的特色。EJB容器允許從J2SE中使用一些或全部的受限制的特色,盡管對於EJB組件是不可用的,但需通過J2SE的安全機制來使用而不是通過直接使用J2SE的API。
Java2平台為EJB1.1規范中的EJB容器所制定的安全策略定義了安全許可集,這些許可在EJB組件的編程限制中出現。通過這個策略,定義了一些許可諸如:java.io.FilePermission,Java.Net. NetPermission,java.io.reflect.ReflectPermissionJava. lang.security.SecurityPermission,以便加強先前所列出的編程限制。
許多EJB容器沒有加強這些限制,他們希望EJB組件開發者能遵守這些編程限制或者是帶有冒險想法違背了這些限制。違背這些限制的EJB組件,比標准方法依賴過多或過少的安全許可,都將很少能在多個EJB容器間移植。
另外,代碼中都將隱藏著一些不確定的、難以預測的問題。所有這些都足以使EJB組件開發者應該知道這些編程限制,同時也應該認真地遵守它們。
任何違背了這些編程限制的EJB組件的實現代碼在編譯時都不能檢查出來,因為這些特點都是Java語言和J2SE中不可缺少的部分。
對於EJB組件的這些限制同樣適用於EJB組件所使用的幫助/訪問(helper/Access)類,J2EE應用程序使用Java文檔(jar)文件格式打包到一個帶.ear(代表Enterprise Archive)擴展名的文件中,這個ear文件對於發送給文件部署器來說是標准的格式。
ear文件中包括在一個或多個ejb-jar文件中的EJB組件,還可能有ejb-jar所依賴的庫文件。所有ear文件中的代碼都是經過深思熟慮開發的應用程序並且都遵守編程限制和訪問許可集。
未來版本的規范可能會指定通過部署工具來定制安全許可的能力,通過這種方法指定了一個合法的組件應授予的許可權限,也指定了一個標准方法的需求:如從文件系統中讀文件應有哪些要求。一些EJB容器/服務器目前在它們的部署工具中都提供了比標准權限或多或少的許可權限,這些並不是EJB1.1規范中所需要的。
理解這些約束
EJB容器是EJB組件生存和執行的運行期環境,EJB容器為EJB組件實例提供了一些服務如:事務管理、安全持久化、資源訪問、客戶端連接。EJB容器也負責EJB組件實例整個生命期的管理、擴展問題以及並發處理。所以,EJB組件就這樣寄居在一個被管理的執行環境中--即EJB容器。
EJB容器也是EJB組件和外部世界的中間者,它提供了客戶連接服務來允許應用程序客戶訪問和使用EJB組件所提供的功能,EJB容器通過bean的Remote和Home接口介入每一個對EJB對象方法的調用。
EJB容器也是EJB組件和訪問其它各種資源和服務的中間人,因為EJB容器介入應用組件和J2EE服務,它可以透明地引入組件部署描述符所定義的服務,如:事務管理、安全、持久化、並發處理和狀態管理。
資源就是一個封裝了訪問資源管理器的對象,因為一個資源工廠就是一個用來建造資源的對象。例如,一個JDBC連接代表一個實現了java.sql.Connection接口的對象,它是用來提供訪問數據庫管理系統的資源,並且實現了javax.sql.DataSource接口的對象是一個這樣JDBC連接的資源工廠。同樣,定義了許多獲得JMS、JavaMail以及URL連接的資源工廠,目前除此之外沒有其它的資源工廠了。
J2EE連接體系結構,目前正在修改,將期盼著包括J2EE未來版本的規范,這個連接體系結構定義了標准的資源適配器和依附於連接、事務、安全管理的合同,所以應用服務器將以標准和統一的方式插入各種企業信息系統,包括ERP(如SAP R/3),主框架事務處理系統和數據庫系統。
因為EJB容器完全負責EJB組件的生命期、並發處理、資源訪問、安全等等,所以與容器本身的鎖定和並發管理相沖突的可能性就需要消除,許多限制都需要使用來填上潛在的安全漏洞。
除了與EJB容器責任與安全沖突的問題,EJB組件還意味著僅僅聚焦於商務邏輯,它依賴於EJB容器所提供的服務而不是自己來直接解決底層的系統層的問題。
可能的問題
通常,EJB組件在容器之間的移植不可避免地與如下問題相關:
1.它需要依靠的受限制的特點在特定EJB容器中沒有得到加強。
2.它需要依靠的非標准的服務從容器中可獲得。
為了保證EJB組件的可移植性和一致的行為,你應該使用一個具有與Java2平台安全策略集相一致的策略集的容器來測試EJB組件,並且其加強了前述的編程限制。
總結
EJB組件開發者應該知道這些推薦的關於EJB組件的編程限制,明白它們的重要性,並且從組件的穩定性和可移植性利益方面考慮來遵循它們。因為這些編程限制能阻止你使用標准的Java語言的特點,違背了這些編程限制在編譯時不會知道,並且加強這些限制也不是EJB容器的責任。
所有這些原因都使你應很小心地遵守這些編程限制,這些限制在組件的合同中已經成為了一個條款,並且它們對於建造可靠的、可移植的組件是非常重要的。