public PermissionCollection getPermissions
(java.security.ProtectionDomain pd)
和ProtectionDomain有一个构造函数:
public ProtectionDomain
(CodeSource cs,
PermissionCollection permissions,
ClassLoader loader,
Principal[] principals)
这两个API为呼叫者提供查询基于Principal权限条目的策略的方法。
@Deprecated public abstract class Policy extends Object
这是一个用于表示基于主体的授权的系统策略的抽象类。 该类的子类实现提供了一种指定基于主题的访问控制Policy
。
甲Policy
对象可以查询该组运行作为授予代码权限的Principal
以下列方式:
policy = Policy.getPolicy();
PermissionCollection perms = policy.getPermissions(subject,
codeSource);
该Policy
对象查询本地策略,且返回适当Permissions
对象和权限被授予与所提供的主题关联的Principals,同时也授予由提供的codeSource指定的代码。
A Policy
包含以下信息。 请注意,此示例仅表示默认的Policy
实现的语法。 该类的子类实现可以实现替代语法,并且可以从诸如文件,数据库或服务器的任何来源检索Policy
。
Policy
中的每个条目都表示为授权条目。 每个授权条目指定代码库,代码签名者和Principals三元组,以及授予该三元组的权限。
grant CodeBase ["URL"], Signedby ["signers"],
Principal [Principal_Class] "Principal_Name" {
Permission Permission_Class ["Target_Name"]
[, "Permission_Actions"]
[, signedBy "SignerName"];
};
三元组名称/值对的CodeBase和Signedby组件是可选的。
如果它们不存在,则任何代码库将匹配,并且任何签名者(包括无符号代码)将匹配。
例如,
grant CodeBase "foo.com", Signedby "foo",
Principal com.sun.security.auth.SolarisPrincipal "duke" {
permission java.io.FilePermission "/home/duke", "read, write";
};
此授权条目指定“foo”签名的代码,以“foo”签名,并以名称duke运行的SolarisPrincipal
有一个Permission
,该Permission
允许执行代码读取和写入目录中的文件“ / home / duke“。
要“运行”为特定的Principal
,代码调用Subject.doAs(subject, ...)
方法。 调用该方法后,代码将以与指定的Subject相关联的所有主体Subject
。 请注意,此Policy
(以及在此Policy中授予的Policy
)仅在呼叫Subject.doAs
发生Subject.doAs
。
多个校长可以在一个授权条目中列出。 在grant条目中的所有Principals必须与相关Subject
提供给Subject.doAs
为Subject
被授予指定的权限。
grant Principal com.sun.security.auth.SolarisPrincipal "duke",
Principal com.sun.security.auth.SolarisNumericUserPrincipal "0" {
permission java.io.FilePermission "/home/duke", "read, write";
permission java.net.SocketPermission "duke.com", "connect";
};
此条目允许任何以“duke”和“0”权限运行的代码在duke的主目录中读取和写入文件,以及允许将套接字连接到“duke.com”。
请注意,非基于委托授权项不在此许可Policy
。 因此,授予条目如:
grant CodeBase "foo.com", Signedby "foo" {
permission java.io.FilePermission "/tmp/scratch", "read, write";
};
被拒绝
此类许可必须列在java.security.Policy
。
通过将auth.policy.provider
安全属性的值设置为所需的Policy
实现类的完全限定名称,可以更改默认的Policy
实现。
security properties
Modifier | Constructor and Description |
---|---|
protected |
Policy()
已弃用
唯一的构造函数。
|
Modifier and Type | Method and Description |
---|---|
abstract PermissionCollection |
getPermissions(Subject subject, CodeSource cs)
已弃用
检索授予与指定的CodeSource相关的校长的
CodeSource 。
|
static Policy |
getPolicy()
已弃用
返回已安装的Policy对象。
|
abstract void |
refresh()
已弃用
刷新并重新加载策略。
|
static void |
setPolicy(Policy policy)
已弃用
设置系统范围的Policy对象。
|
public static Policy getPolicy()
AuthPermission("getPolicy")
权限调用SecurityManager.checkPermission
,以确保调用方有权获取Policy对象。
null
。
SecurityException
- 如果当前线程没有获取策略对象的权限。
setPolicy(javax.security.auth.Policy)
public static void setPolicy(Policy policy)
SecurityManager.checkPermission
与AuthPermission("setPolicy")
权限,以确保呼叫者有权限设置策略。
policy
- 新的系统策略对象。
SecurityException
- 如果当前线程没有设置策略的权限。
getPolicy()
public abstract PermissionCollection getPermissions(Subject subject, CodeSource cs)
CodeSource
。
subject
-所述Subject
所关联的Principal,在与所提供的结合CodeSource
,确定权限此方法返回的。
该参数可以是null
。
cs
- 由其CodeSource
的代码,与所提供的Subject
一起确定此方法返回的权限。
该参数可以是null
。
Subject
和提供的
主题和
cs参数中指定的代码。
public abstract void refresh()
此方法使此对象刷新/重新加载其当前策略。 这是依赖于实现的。 例如,如果Policy对象存储在文件中,则调用refresh
将导致该文件被重新读取。
SecurityException
- 如果主叫方没有刷新策略的权限。