文档

Java™ 教程-Java Tutorials 中文版
安全管理
Trail: Essential Classes
Lesson: The Platform Environment
Section: System Utilities

安全管理

security manager (安全管理器) 是定义应用程序安全策略的对象。此策略指定不安全或敏感的操作。安全策略不允许的任何操作都会导致抛出 SecurityException。应用程序还可以查询其安全管理器以发现允许的操作。

通常,Web applet 与浏览器或 Java Web Start 插件提供的安全管理器一起运行。其他类型的应用程序通常在没有安全管理器的情况下运行,除非应用程序本身定义了安全管理器。如果没有安全管理器,则该应用程序没有安全策略,并且没有任何限制。

本节介绍应用程序如何与现有安全管理器进行交互。有关更多详细信息,包括有关如何设计安全管理器的信息,请参阅 Security Guide

与安全管理器交互

安全管理器是 SecurityManager 类型的对象;要获取对此对象的引用,请调用 System.getSecurityManager

SecurityManager appsm = System.getSecurityManager();

如果没有安全管理器,则此方法返回 null

一旦应用程序具有对安全管理器对象的引用,它就可以请求执行特定事务的权限。标准库中的许多类都是这样做的。例如,System.exit,它带退出状态终止 Java 虚拟机,调用 SecurityManager.checkExit 以确保当前线程有权关闭应用程序。

SecurityManager 类定义了许多用于验证其他类型操作的其他方法。例如,SecurityManager.checkAccess 验证线程访问,SecurityManager.checkPropertyAccess 验证对指定属性的访问。每个操作或一组操作都有自己的 checkXXX() 方法。

此外,checkXXX() 方法的集合表示已受安全管理器保护的操作集。通常,应用程序不必直接调用任何 checkXXX() 方法。

识别安全违规

在没有安全管理器的情况下的许多常规操作,在使用安全管理器运行时都会抛出 SecurityException。即使在调用未记录为抛出 SecurityException 的方法时也是如此。例如,请考虑以下用于读取文件的代码:

reader = new FileReader("xanadu.txt");

在没有安全管理器的情况下,如果 xanadu.txt 存在且可读,则此语句无错误地执行。但是假设此语句插入到 Web applet 中,该 applet 通常在不允许文件输入的安全管理器下运行。可能会导致以下错误消息:

appletviewer fileApplet.html
Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.io.FilePermission characteroutput.txt write)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
        at java.security.AccessController.checkPermission(AccessController.java:546)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkWrite(SecurityManager.java:962)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
        at java.io.FileWriter.<init>(FileWriter.java:46)
...

请注意,在这种情况下抛出的特定异常 java.security.AccessControlExceptionSecurityException 的子类。


Previous page: System Properties
Next page: Miscellaneous Methods in System