java學習心得筆記
關。
以下是你應該回避使用的一些java特色,并且在你的ejb組件的實現代碼中要嚴格限
制它們的使用:
1.使用static,非final 字段。建議你在ejb組件中把所有的static字段都聲明為final型的。這樣可以保證前后一致的運行期語義,使得ejb容器有可以在多個java虛擬機之間分發組件實例的靈活性。
2.使用線程同步原語來同步多個組件實例的運行。避免這個問題,你就可以使ejb容器靈活的在多個java虛擬機之間分發組件實例。
3.使用awt函數完成鍵盤的輸入和顯示輸出。約束它的原因是服務器方的商業組件意味著提供商業功能而不包括用戶界面和鍵盤的i/o功能。
4.使用文件訪問/java.io 操作。ejb商業組件意味著使用資源管理器如jdbc來存儲和檢索數據而不是使用文件系統api。同時,部署工具提供了在部署描述器(descriptor)中存儲環境實體,以至于ejb組件可以通過環境命名上下文用一種標準的方法進行環境實體查詢。所以,使用文件系統的需求基本上是被排除了。
5.監聽和接收socket連接,或者用socket進行多路發送。ejb組件并不意味著提供網絡socket服務器功能,但是,這個體系結構使得ejb組件可以作為socket客戶或是rmi客戶并且可以和容器所管理的環境外面的代碼進行通訊。
6.使用映象api查詢ejb組件由于安全規則所不能訪問的類。這個約束加強了java平臺的安全性。
7.欲創建或獲得一個類的加載器,設置或創建一個新的安全管理器,停止java虛擬機,改變輸入、輸出和出錯流。這個約束加強了安全性同時保留了ejb容器管理運行環境的能力。
8.設置socket工廠被url's serversocket,socket和stream handler使用。避免這個特點,可以加強安全性同時保留了ejb容器管理運行環境的能力。
9.使用任何方法啟動、停止和管理線程。這個約束消除了與ejb容器管理死鎖、線程
和并發問題的責任相沖突的可能性。
通過限制使用10-16幾個特點,你的目標是堵上一個潛在的安全漏洞:
10.直接讀寫文件描述符。
11.為一段特定的代碼獲得安全策略信息。
12.加載原始的類庫。
13.訪問java一般角色所不能訪問的包和類。
14.在包中定義一個類。
15.訪問或修改安全配置對象(策略、安全、提供者、簽名者和實體)。
16.使用java序列化特點中的細分類和對象替代。
17.傳遞this引用指針作為一個參數或者作為返回值返回this引用指針。你必須使用
sessioncontext或entitycontext中的getejbobject()的結果。
java2平臺的安全策略
以上所列的特點事實上正是java編程語言和java2標準版中的標準的、強有力的特色。ejb容器允許從j2se中使用一些或全部的受限制的特色,盡管對于ejb組件是不可用的,但需通過j2se的安全機制來使用而不是通過直接使用j2se的api。
java2平臺為ejb1.1規范中的ejb容器所制定的安全策略定義了安全許可集,這些許可在ejb組件的編程限制中出現。通過這個策略,定義了一些許可諸如:java.io.filepermission,.netpermission,java.io.reflect.reflectpermission,java.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組件還意味著僅僅聚焦于商務邏輯,它依賴于ejb容器所提供的服務而不是自己來直接解決底層的系統層的問題。