安全管理器在Java语言中的作用就是检查操作是否有权限执行。是Java沙箱的基础组件。我们一般所说的打开沙箱,也是加-Djava.security.manager选项
public FileInputStream(File file) throws FileNotFoundException { String name = (file != null ? file.getPath() : null); SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkRead(name); } if (name == null) { throw new NullPointerException(); } if (file.isInvalid()) { throw new FileNotFoundException("Invalid file path"); } fd = new FileDescriptor(); fd.attach(this); path = name; open(name); }
1234567891011121314151617 SecurityManager具体点,我们看下SecurityManager的主要方法列表:
checkAccept(String, int)
 checkAccess(Thread)
 checkAccess(ThreadGroup)
 checkAwtEventQueueAccess()
 checkConnect(String, int)
 checkConnect(String, int, Object)
 checkCreateClassLoader()
 checkDelete(String)
 checkExec(String)
 checkExit(int)
 checkLink(String)
 checkListen(int)
 checkMemberAccess(Class<?>, int)
 checkMulticast(InetAddress)
 checkMulticast(InetAddress, byte)
 checkPackageAccess(String)
 checkPackageDefinition(String)
 checkPermission(Permission)
 checkPermission(Permission, Object)
 checkPrintJobAccess()
 checkPropertiesAccess()
 checkPropertyAccess(String)
 checkRead(FileDescriptor)
 checkRead(String)
 checkRead(String, Object)
 checkSecurityAccess(String)
 checkSetFactory()
 checkSystemClipboardAccess()
 checkTopLevelWindow(Object)
 checkWrite(FileDescriptor)
 checkWrite(String)
都是check方法,分别囊括了文件的读写删除和执行、网络的连接和监听、线程的访问、以及其他包括打印机剪贴板等系统功能。而这些check代码也基本横叉到了所有的核心Java API上。
AccessController 组成 代码源权限策略保护域

