扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:开发者在线 2007年4月29日
关键字:
访问控制器
AccessController类通常可以获得一个详细的访问控制,这是新的Java安全模型(从Java 1.3开始)的一个主要特征。SecurityManager一直被应用于Java上,它是向后兼容的,访问控制器是在AccessController类中被管理的(这就是为什么该类的SecurityManager没有在Java 2中被推荐使用的原因)。例如,您可以用下面的方法来实现SecurityManager.checkRead(String fileName)方法:
checkPermission(new FilePermission(fileName,"read"));
下面的语句告诉您如何使用SecurityManager.checkPermission(Permission permission)方法:
java.security.AccessController.checkPermission(permission);
AccessController类决定哪些允许访问(使用checkPermission()方法,该方法确定应该批准还是拒绝由指定权限所指示的访问请求;假如这样的话,它还要使用doPrivileged()方法),还要决定是否允许您得到在当前访问管理上下文的引用(使用getContext()方法)。
AccessControlContext类决定它所封装的上下文是否允许对系统资源进行访问。它可以包括一个或多个ProtectionDomain类。每一个类都包括对特殊代码段的存取权限。ProtectionDomain类包括两个类:PermissionCollection类用于存储权限集,CodeSource类用于保存代码在URL格式中的位置信息。它也可以在SignedBy类中保存签名信息,SignedBy类中包括一个Certificate对象数组。代码接收来自同一个来源且在同一个Protection Domain(保护域)中的同一个人的签名。AccessControlContext对象的checkPermission()方法针对当前的上下文,检查与ProtectionDomain对象相关的访问权限的设置。
doPrivileged()能在运行时启用特权,执行指定的操作。如果使用doPrivileged(),就会用到被简化的决策程序。一般用到doPrivileged()方法的时候,也会使用到PrivilegedAction界面,这个界面不会产生异常。
AccessController.doPrivileged(new PrivilegedAction() {
Public Object run() {
// privileged action can return some value or null
} }
);
doPrivileged()方法的第二个参数是AccessControlContext对象,这个参数表示在执行指定操作前,应用于调用方的域特权的限制条件。AccessController的getcontext()方法可以得到上下文并使用它们。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者