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 - 如果主叫方没有刷新策略的权限。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.