java.lang.SecurityManager.checkPermission(Permission perm, Object context)%uA0方法抛出,如果指定的安全上下文被拒绝访问的获准指定的资源一个SecurityException。上下文必须是以前调用getSecurityContext和访问控制决策返回安全上下文是基于对于安全性方面的配置的安全策略。
如果上下文是AccessControlContext的一个实例,AccessControlContext.checkPermission方法被调用,指定权限。如果上下不是AccessControlContext的一个实例,那么会抛出一个SecurityException。
声明
以下是java.lang.SecurityManager.checkPermission()方法的声明
public void checkPermission(Permission perm, Object context)
参数
-
perm%uA0-- 所请求的许可。
-
context%uA0-- 依赖于系统的安全上下文。
返回值
这个方法没有返回值。
异常
-
SecurityException%uA0-- 如果指定的安全上下文不是AccessControlContext的实例(例如,为空),或者被拒绝访问由给定权限所指定的资源。
-
NullPointerException%uA0-- 如果permission参数为null。
例子
我们的示例,需要为每个命令的权限被阻止。一项新政策文件设置,仅允许创建和我们的安全管理器的设置。该文件位于C:/java.policy,包含以下文字:
grant { permission java.lang.RuntimePermission "setSecurityManager" permission java.lang.RuntimePermission "createSecurityManager" permission java.lang.RuntimePermission "usePolicy" }
下面的例子显示了lang.SecurityManager.checkPermission()方法的使用。
package com.yiibai import java.io.FilePermission import java.security.AccessControlContext import java.security.AccessController public class SecurityManagerDemo extends SecurityManager { public static void main(String[] args) { // get current security context AccessControlContext con = AccessController.getContext() // set the policy file as the system securuty policy System.setProperty("java.security.policy", "file:/C:/java.policy") // create a security manager SecurityManagerDemo sm = new SecurityManagerDemo() // set the system security manager System.setSecurityManager(sm) // perform the check sm.checkPermission(new FilePermission("test.txt", "read,write"), con) // print a message if we passed the check System.out.println("Allowed!") } }
让我们来编译和运行上面的程序,这将产生以下结果:
Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission test.txt read,write)