Java SecurityManager 类



简介

Java SecurityManager 类允许应用程序实现安全策略。它允许应用程序在执行可能不安全或敏感的操作之前,确定操作是什么以及是否在允许执行该操作的安全上下文中尝试该操作。应用程序可以允许或拒绝该操作。

类声明

以下是java.lang.SecurityManager 类的声明:

@Deprecated(since="17",
            forRemoval=true)
public class SecurityManager
   extends Object

注意 - Security Manager 已被弃用,并可能在将来的版本中被移除。Security Manager 没有替代品。有关讨论和替代方案,请参见 JEP 411

类构造函数

序号 构造函数及描述
1

SecurityManager()

这将构造一个新的 SecurityManager。

类方法

序号 方法及描述
1 void checkAccept(String host, int port)

如果调用线程不允许从指定的 host 和 port 接收套接字连接,则此方法将抛出 SecurityException。

2 void checkAccess(Thread t)

如果调用线程不允许修改线程参数,则此方法将抛出 SecurityException。

3 void checkAccess(ThreadGroup g)

如果调用线程不允许修改线程组参数,则此方法将抛出 SecurityException。

4 void checkAwtEventQueueAccess()

如果调用线程不允许访问 AWT 事件队列,则此方法将抛出 SecurityException。

5 void checkConnect(String host, int port)

如果调用线程不允许打开到指定的 host 和 port 的套接字连接,则此方法将抛出 SecurityException。

6 void checkConnect(String host, int port, Object context)

如果指定的 security context 不允许打开到指定的 host 和 port 的套接字连接,则此方法将抛出 SecurityException。

7 void checkCreateClassLoader()

如果调用线程不允许创建新的类加载器,则此方法将抛出 SecurityException。

8 void checkDelete(String file)

如果调用线程不允许删除指定的文件,则此方法将抛出 SecurityException。

9 void checkExec(String cmd)

如果调用线程不允许创建子进程,则此方法将抛出 SecurityException。

10 void checkExit(int status)

如果调用线程不允许使 Java 虚拟机以指定的 status code 停止,则此方法将抛出 SecurityException。

11 void checkLink(String lib)

如果调用线程不允许动态链接由字符串参数 file 指定的库代码,则此方法将抛出 SecurityException。

12 void checkListen(int port)

如果调用线程不允许在指定的本地端口号上等待连接请求,则此方法将抛出 SecurityException。

13 void checkMemberAccess(Class<?> clazz, int which)

如果调用线程不允许访问成员,则此方法将抛出 SecurityException。

14 void checkMulticast(InetAddress maddr)

如果调用线程不允许使用 (加入/离开/发送/接收) IP 多播,则此方法将抛出 SecurityException。

15 void checkPackageAccess(String pkg)

如果调用线程不允许访问参数指定的包,则此方法将抛出 SecurityException。

16 void checkPackageDefinition(String pkg)

如果调用线程不允许在参数指定的包中定义类,则此方法将抛出 SecurityException。

17 void checkPermission(Permission perm)

如果根据当前有效的安全策略不允许给定的权限指定的请求访问,则此方法将抛出 SecurityException。

18 void checkPermission(Permission perm, Object context)

如果指定的 security context 被拒绝访问给定权限指定的资源,则此方法将抛出 SecurityException。

19 void checkPrintJobAccess()

如果调用线程不允许启动打印作业请求,则此方法将抛出 SecurityException。

20 void checkPropertiesAccess()

如果调用线程不允许访问或修改系统属性,则此方法将抛出 SecurityException。

21 void checkPropertyAccess(String key)

如果调用线程不允许访问具有指定键名的系统属性,则此方法将抛出 SecurityException。

22 void checkRead(FileDescriptor fd)

如果调用线程不允许从指定的文件描述符读取,则此方法将抛出 SecurityException。

23 void checkRead(String file)

如果调用线程不允许读取字符串参数指定的文件,则此方法将抛出 SecurityException。

24 void checkRead(String file, Object context)

如果指定的 security context 不允许读取字符串参数指定的文件,则此方法将抛出 SecurityException。

25 void checkSecurityAccess(String target)

此方法确定是否应授予或拒绝具有指定权限目标名称的权限。

26 void checkSetFactory()

如果调用线程不允许设置 ServerSocket 或 Socket 使用的套接字工厂,或 URL 使用的流处理程序工厂,则此方法将抛出 SecurityException。

27 void checkSystemClipboardAccess()

如果调用线程不允许访问系统剪贴板,则此方法将抛出 SecurityException。

28 boolean checkTopLevelWindow(Object window)

如果调用线程不受信任以显示 window 参数指示的顶级窗口,则此方法返回 false。

29 void checkWrite(FileDescriptor fd)

如果调用线程不允许写入指定的文件描述符,则此方法将抛出 SecurityException。

30 void checkWrite(String file)

如果调用线程不允许写入字符串参数指定的文件,则此方法将抛出 SecurityException。

31 protected Class[] getClassContext()

此方法返回当前执行堆栈作为类的数组。

32 Object getSecurityContext()

此方法创建一个封装当前执行环境的对象。

33 ThreadGroup getThreadGroup()

此方法返回在调用此方法时创建任何新线程的线程组。

继承的方法

此类继承自以下类的方法:

  • java.lang.Object

示例

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

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

以下示例显示了 lang.SecurityManager.checkAccept() 方法的用法。

package com.tutorialspoint;

public class SecurityManagerDemo {

   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
      SecurityManager sm = new SecurityManager();

      // set the system security manager
      System.setSecurityManager(sm);

      // check if accepting socket connection is enabled
      sm.checkAccept("www.tutorialspoint.com", 8080);

      // 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)
广告