- 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 描述 protectedPolicy()已过时。唯一的构造函数。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 abstract PermissionCollectiongetPermissions(Subject subject, CodeSource cs)已过时。检索授予与指定的CodeSource相关的校长的权限。static PolicygetPolicy()已过时。返回已安装的Policy对象。abstract voidrefresh()已过时。刷新并重新加载策略。static voidsetPolicy(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- 如果主叫方没有刷新策略的权限。
-
-