基于 Java 2 运行时安全模型的线程协作
2009-09-20 00:00:00 来源:WEB开发网有两个运行时选项特别重要,-Djava.security.manager 告诉 JVM 装载 Java 的安全管理器,进行运行时的安全检查,而 -Djava.security.policy 用来指定我们使用的策略文件。
运行的结果如清单 7 所示。
清单 7. 运行结果
Exception in thread "main" java.security.AccessControlException: access denied (
java.io.FilePermission c:\paper\server\out.tmp write)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkWrite(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileWriter.<init>(Unknown Source)
at sample.permtest.server.LogService.log(LogService.java:19)
at sample.permtest.client.Client.main(Client.java:16)
客户端运行后,第一条消息成功写入 c:\\paper\\client\\out.tmp 文件,而第二条消息由于没有 c:\paper\server\out.tmp 文件的写权限而被拒绝执行。
线程间的安全协作
前一节本文给出的示例,如果放在线程间异步协作的环境里,情况会变得复杂。如图 4 所示。
图 4. 线程的异步协作
更多精彩
赞助商链接