一、權限(permission)
權限,是允許代碼執行的具體操作。權限可以是專門的讀取指定文件,也可以是通用的。
權限本身包括三個要素:權限類型、權限名以及允許的操作。
- 權限類型:是必須的,實際上是一個實現權限的Java類名,如:java.security.AllPermission
- 權限名:有一些權限(如java.security.AllPermission不限制代碼的操作)不需要權限名。一般情況下,需要基於權限類型設置相應的權限名,如文件權限的權限名就可以是一個文件名或目錄名。通常用通配符指定權限名。
- 允許的操作:對應於權限類型。有些權限本身就沒有操作。權限操作指定了對目標可以執行的操作行爲,如文件權限可以指定對某文件可讀、可寫或可刪除
下面是三個權限的例子。第一個指定了權限類型,第二個指定了類型和權限名,第三個則三個都指定了
permission java.security.AllPermission;
permission java.lang.RuntimePermission "stopThread"
permission java.io.FilePermission "/tmp/foo" , "read"
二、代碼源(code source)
代碼源是類所在的位置,若對類做了簽名,則簽名者的信息也在代碼源中保存。
該位置被指定位URL地址,此URL地址遵循標準Java實現:代碼可以通過基於文件的URL從文件系統獲得,也可以通過基於網絡的URL從網絡上獲得
在代碼源中的URL和簽名者信息都是可選項。賦予某些類權限時可以只基於類所在代碼的URL,也可以只根據類的簽名者確定其權限
一般稱代碼源中的URL爲代碼基
三、保護域(protection domain)
保護域是爲將代碼源的權限進行組合而建立的。保護域是默認沙箱中的基本概念
即一個保護域包含了多條代碼源和其權限的關聯信息
四、策略文件(policy file)
策略文件時控制沙箱的管理要素。策略文件通常包括一個或多個保護域的項。
通常情況下,我們認爲是策略文件中的項完成了代碼權限的指定任務。
通常使用的只有兩類策略文件:
- 全局策略文件:可以應用於虛擬機中使用的所有實例
- 用戶專用策略文件:指定用戶使用
五、密鑰庫(keystore)
代碼簽名需要基於公開密鑰證書(public key certificate),證書本身需要存儲在某處(通常存儲在文件中),保存證書的位置被稱爲密鑰庫