- java.lang.Object
-
- javax.security.auth.Policy
-
- 已知直接子类:
-
PolicyFile
已过时。从JDK版本1.4开始 - 由java.security.Policy替代。 java.security.Policy有一个方法:public PermissionCollection getPermissions (java.security.ProtectionDomain pd)
和ProtectionDomain有一个构造函数:public ProtectionDomain (CodeSource cs, PermissionCollection permissions, ClassLoader loader, Principal[] principals)
这两个API为呼叫者提供查询基于Principal权限条目的策略的方法。
@Deprecated(since="1.4") public abstract class Policy extends Object
这是一个用于表示基于主体的授权的系统策略的抽象类。 该类的子类实现提供了一种指定基于主题的访问控制
Policy
。可以查询一个
Policy
对象,Principal
以下列方式授予以Principal
运行的代码的权限集:policy = Policy.getPolicy(); PermissionCollection perms = policy.getPermissions(subject, codeSource);
Policy
对象咨询当地政策和回报以及适当的Permissions
对象,其中授予与提供的subject
相关联的校长的权限,并授予由所提供的代码指定的代码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.com”的代码,以“foo”签名,并以名称duke运行的SolarisPrincipal
有一个Permission
,这个Permission
允许执行代码读取和写入目录中的文件“ /家/公爵”。要“运行”为特定的
Principal
,代码调用Subject.doAs(subject, ...)
方法。 调用该方法后,代码将作为与指定的Subject
相关联的所有主体运行。 请注意,此Policy
(以及在此Policy
授予的权限)仅在发生Subject.doAs
的电话Subject.doAs
。多个校长可以在一个授权条目中列出。 授予条目中的所有主体必须与提供给
Subject.doAs
的Subject
相关联,以使该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
实现。- 从以下版本开始:
- 1.4
- 另请参见:
-
security properties
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
Policy()
已过时。唯一的构造函数。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 abstract PermissionCollection
getPermissions(Subject subject, CodeSource cs)
已过时。检索授予与指定的CodeSource
相关的校长的权限。static Policy
getPolicy()
已过时。返回已安装的Policy对象。abstract void
refresh()
已过时。刷新并重新加载策略。static void
setPolicy(Policy policy)
已过时。设置系统范围的Policy对象。
-
-
-
方法详细信息
-
getPolicy
public static Policy getPolicy()
已过时。返回已安装的Policy对象。 该方法首先使用AuthPermission("getPolicy")
权限来调用SecurityManager.checkPermission
,以确保调用方有权获取Policy对象。- 结果
-
已安装的策略。
返回值不能为
null
。 - 异常
-
SecurityException
- 如果当前线程没有获取策略对象的权限。 - 另请参见:
-
setPolicy(javax.security.auth.Policy)
-
setPolicy
public static void setPolicy(Policy policy)
已过时。设置系统范围的Policy对象。 此方法首先使用AuthPermission("setPolicy")
权限调用SecurityManager.checkPermission
,以确保呼叫者有权设置策略。- 参数
-
policy
- 新的系统策略对象。 - 异常
-
SecurityException
- 如果当前线程没有设置策略的权限。 - 另请参见:
-
getPolicy()
-
getPermissions
public abstract PermissionCollection getPermissions(Subject subject, CodeSource cs)
已过时。检索授予与指定的CodeSource
相关的校长的权限。- 参数
-
subject
- 其相关主体的Subject
与所提供的CodeSource
一起确定此方法返回的权限。 该参数可以是null
。 -
cs
- 由其CodeSource
指定的代码,与所提供的Subject
一起确定此方法返回的权限。 此参数可能为null
。 - 结果
-
授予所有
Subject
权限的Subject
和提供的 主题和 cs参数中指定的代码。
-
refresh
public abstract void refresh()
已过时。刷新并重新加载策略。此方法使此对象刷新/重新加载其当前策略。 这是依赖于实现的。 例如,如果Policy对象存储在文件中,则调用
refresh
将导致该文件被重新读取。- 异常
-
SecurityException
- 如果主叫方没有刷新策略的权限。
-
-