Java SecurityManager checkPropertyAccess() 方法



描述

Java SecurityManager checkPropertyAccess(String key) 方法如果调用线程不允许访问具有指定键名称的系统属性,则会抛出 SecurityException。此方法由 System 类的 getProperty 方法使用。

此方法使用 PropertyPermission(key, "read") 权限调用 checkPermission。如果覆盖此方法,则应在覆盖方法通常抛出异常的位置处调用 super.checkPropertyAccess。

声明

以下是 java.lang.SecurityManager.checkPropertyAccess() 方法的声明

public void checkPropertyAccess(String key)

参数

key − 系统属性键。

返回值

此方法不返回值。

异常

  • SecurityException − 如果调用线程没有权限访问指定的系统属性。

  • NullPointerException − 如果 key 参数为 null。

  • IllegalArgumentException − 如果 key 为空。

示例

我们的示例要求阻止每个命令的权限。设置了一个新的策略文件,该文件只允许创建和设置我们的安全管理器。该文件位于 C:/java.policy 中,包含以下文本:

grant {
   permission java.lang.RuntimePermission "setSecurityManager";
   permission java.lang.RuntimePermission "createSecurityManager";
   permission java.lang.RuntimePermission "usePolicy";
};

以下示例演示了 lang.SecurityManager.checkPropertyAccess() 方法的使用。

package com.tutorialspoint;

public class SecurityManagerDemo extends SecurityManager {

   public static void main(String[] args) {

      // 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.checkPropertyAccess("java.runtime.name");

      // print a message if we passed the check
      System.out.println("Allowed!");
   }
}

输出

让我们编译并运行以上程序,这将产生以下结果:

Exception in thread "main" java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release
	at java.base/java.lang.System.setSecurityManager(System.java:430)
	at com.tutorialspoint.SecurityManagerDemo.main(SecurityManagerDemo.java:14)

注意 - Security Manager 自版本 17 起已弃用,并标记为将被移除。

java_lang_securitymanager.htm
广告