一、权限(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),证书本身需要存储在某处(通常存储在文件中),保存证书的位置被称为密钥库