Java SecurityManager checkPermission()方法与示例

语法:

    public void checkPermission(Permission  perm);
    public void checkPermission(Permission  perm, Object cntxt);

SecurityManager类checkPermission()方法

  • checkPermission()方法在java.lang包中可用。

  • checkPermission(Permission perm)方法为请求的访问调用AccesController的checkPermission,由指定的权限指示。

  • 当给定的安全上下文是授予资源的访问权限时,checkPermission(Permission perm,Object cntxt)方法调用AccesControlContext的checkPermission,当cntxt是AccessControlContext的实例时,由指定的权限表示。

  • checkPermission(Permission perm)checkPermission(Permission perm,Object cntxt)方法在授予权限时可能会引发异常。

  • checkPermission(Permission perm):

    • SecurityException-如果拒绝当前保留的安全策略进行访问,则可能引发此异常。

    • NullPointerException-如果给定参数为null,则可能引发此异常。

  • checkPermission(Permission perm, Object cntxt):

    • SecurityException-当给定的权限不允许调用线程访问资源或安全性cntxt(context)不是AccessControlContext的对象时,可能引发此异常。

    • NullPointerException-如果给定的第一个参数为null,则可能引发此异常。

  • 这些是非静态方法,只能通过类对象访问,如果尝试使用类名称访问这些方法,则会收到错误消息。

参数:

  • 在第一种情况下,权限权限-此参数表示请求的权限。

  • 在第二种情况下,权限权限,对象cntxt

    • 许可权限–与第一种情况下定义的相似。

    • 对象cntxt –此参数表示系统特定的安全上下文。

返回值:

此方法的返回类型为void,不返回任何内容。

示例

// Java program to demonstrate the example 
// of checkPermission() method of SecurityManager class

import java.security.*;
import java.io.*;

public class CheckPermission extends SecurityManager {
    public static void main(String[] args) {
        Permission perm = new FilePermission("getProperties().doc", "read,write");
        AccessControlContext acc = AccessController.getContext();

        //通过使用setProperty()方法来设置策略属性
        //安全管理器
        System.setProperty("java.security.policy", "file:/C:/java.policy");

        //实例化CheckPermission对象
        CheckPermission cp = new CheckPermission();

        //通过使用setSecurityManager()方法来设置
        //安全管理器
        System.setSecurityManager(cp);

        //通过使用checkPermission(Permission)方法可以
        //检查该受限权限
        cp.checkPermission(perm);

        //通过使用checkPermission(Permission,Object)方法是
        //检查该受限权限cntxt时一个实例
        //AccessControlContext-
        cp.checkPermission(perm, acc);

        //显示消息 
        System.out.println("Accepted..");
    }
}

输出结果

Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "getProperties().doc" "read,write")
	at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
	at java.base/java.security.AccessController.checkPermission(AccessController.java:897)
	at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:322)
	at CheckPermission.main(CheckPermission.java:25)