如何处理 ProtectionDomain null 的 AccessControlException
How to handle AccessControlException with ProtectionDomain null
在一个有些陈旧和复杂的 Swing 应用程序中,我们有一个自定义的安全管理器和策略,显然旨在允许一切:
/*
* allow everything ...
*/
grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};
grant {
permission java.security.AllPermission;
};
grant codeBase "file:${thecompany.codebase}/-"{
permission java.security.AllPermission;
};
${thecompany.codebase}
设置为系统 属性 并且似乎可以正确读取。直到(包括)Zulu Java 8 build 252,这按预期工作:GUI 启动没有明显问题。
然而,当我切换到 Zulu Java 8 build 262(或 Oracle 261)时,我得到了数百个AccessControlException
s,例如:
access:
access denied ("java.lang.RuntimePermission" "getProtectionDomain")
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1336)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:462)
at java.security.AccessController.checkPermission(AccessController.java:886)
...
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:171)
所有这些错误似乎都起源于 ForkJoinWorkerThread
s,并且失败的 "access" debug outputs 都显示相同的奇怪的“空”ProtectionDomain
:
access:
domain that failed ProtectionDomain null
null
<no principals>
null
使用 JDK build 252 时,我在“访问”调试日志中没有看到任何 ProtectionDomain null
。
通读 Oracle release notes and bug fixes for update 261,我发现了很多与安全相关的问题,但 none 给我的印象是直接相关。
那么,在什么情况下(如果有的话)是 ProtectionDomain null
预期的,如何授予它权限?
欢迎了解如何进一步调试。
这是 JDK 261 更新中行为变化的结果:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8249846
根本原因是 ForkJoinPool.defaultForkJoinWorkerThreadFactory
创建的 ForkJoinWorkerThread
现在(错误地?)得到了一个不允许的 AccessControlContext INNOCUOUS_ACC
分配。
在一个有些陈旧和复杂的 Swing 应用程序中,我们有一个自定义的安全管理器和策略,显然旨在允许一切:
/*
* allow everything ...
*/
grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};
grant {
permission java.security.AllPermission;
};
grant codeBase "file:${thecompany.codebase}/-"{
permission java.security.AllPermission;
};
${thecompany.codebase}
设置为系统 属性 并且似乎可以正确读取。直到(包括)Zulu Java 8 build 252,这按预期工作:GUI 启动没有明显问题。
然而,当我切换到 Zulu Java 8 build 262(或 Oracle 261)时,我得到了数百个AccessControlException
s,例如:
access:
access denied ("java.lang.RuntimePermission" "getProtectionDomain")
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1336)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:462)
at java.security.AccessController.checkPermission(AccessController.java:886)
...
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:171)
所有这些错误似乎都起源于 ForkJoinWorkerThread
s,并且失败的 "access" debug outputs 都显示相同的奇怪的“空”ProtectionDomain
:
access:
domain that failed ProtectionDomain null
null
<no principals>
null
使用 JDK build 252 时,我在“访问”调试日志中没有看到任何 ProtectionDomain null
。
通读 Oracle release notes and bug fixes for update 261,我发现了很多与安全相关的问题,但 none 给我的印象是直接相关。
那么,在什么情况下(如果有的话)是 ProtectionDomain null
预期的,如何授予它权限?
欢迎了解如何进一步调试。
这是 JDK 261 更新中行为变化的结果:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8249846
根本原因是 ForkJoinPool.defaultForkJoinWorkerThreadFactory
创建的 ForkJoinWorkerThread
现在(错误地?)得到了一个不允许的 AccessControlContext INNOCUOUS_ACC
分配。