Java安全管理器
Java安全管理器处理必要的权限检查。缺省的实现是Java.lang.SecurityManager类中,如有必要可以派生出子类或取代之。对于不安全的行为,Java就会强制安全管理器进行安全检查。
安全管理器是如何工作的:
你的代码调用需要权限的代码,如new FileInputStream("filename")
那代码就会调用安全管理器检查权限
安全管理器决定权限是否允许。这通常(而不是必须的)会与java.security.AccessController交互。如果没有权限,就会出现运行异常:java.lang.SecurityException,否则不会返回异常而正常运行。安全管理器会监督整个执行线程已确保每个类都有相应权限。
如果没有异常,说明有足够的权限,程序将继续正常运行。
设置安全管理器有2个常用的方法
执行命令 java -Djava.security.manager FileWriteTest
程序中指定
SecurityManager security = new SecurityManager();
System.setSecurityManager(security);
Java.policy文件
某些权限必须赋予类,这是在java.policy文件中定义,java.policy文件保存在目录$JAVA_HOME/jre/lib/security中。
Java中的权限
Java本身定义了许多权限,顶层类包括:
java.security.AllPermission—对所有文件都有的全部权限
java.security.BasicPermission—大多数简单权限的超类
java.io.FilePermission—文件读写权限
java.net.SocketPermission—打开连接远程计算机的包,并用DNS解析主机名
BasicPermission有许多派生类定义其他权限
javax.sound.sampled.AudioPermission—访问音频函数的权限,如播放、录音等。
javax.awt.AWTPermission—与图形有关的行为的权限,比如访问剪贴板或读AWT事件。
java.net.NetPermission—处理URL的权限,必然增加一个口令认证。
java.util.PropertyPermission—读写系统属性的权限。
java.lang.reflect.ReflectPermission—使用reflection的权限。
java.lang.RuntimePermission—运行时安全元素的权限,比如设置类装载器或安全管理器。
java.security.SecurityPermission—安全元素的权限,像安全策略和加密服务。
java.io.SerializablePermission—读写可序列化对象的权限。
java.sql.SQLPermission—设置SQL日志的权限。