Java 8 如何使用ProtectionDomain null处理AccessControlException

Java 8 如何使用ProtectionDomain null处理AccessControlException,java-8,security-policy,Java 8,Security Policy,在一个有点陈旧和复杂的Swing应用程序中,我们有一个定制的安全管理器和策略,显然是为了允许一切: /* * allow everything ... */ grant codeBase "file:${{java.ext.dirs}}/*" { permission java.security.AllPermission; }; grant { permission java.security.AllPermission; }; grant codeBas

在一个有点陈旧和复杂的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;
};
${company.codebase}
被设置为系统属性,并且看起来读取正确。直到(包括)Zulu Java 8 build252,这都可以按需要工作:GUI启动时没有明显的问题

但是,当我切换到Zulu Java 8 build262(或Oracle261)时,我会收到数百个
AccessControlException
,例如:

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,并且所有故障的错误都显示相同的奇怪的“null”
ProtectionDomain

access:
domain that failed ProtectionDomain null
 null
 <no principals>
 null
访问:
未能通过ProtectionDomain null的域
无效的
无效的
使用JDK build 252时,我在“access”调试日志中没有看到任何
ProtectionDomain null

通过阅读,我看到了很多与安全相关的问题,但没有一个与我直接相关

那么,在什么情况下(如果有的话),
ProtectionDomain应该为null
,如何授予它权限


欢迎任何关于如何进一步调试的想法。

这是JDK 261更新中行为改变的结果:


根本原因是
ForkJoinWorkerThread
ForkJoinPool.defaultForkJoinWorkerThreadFactory
创建的
s现在(错误?)获得了一个不允许的
AccessControlContext无害\u ACC
分配。

这是JDK 261更新中行为改变的结果:


根本原因是
ForkJoinWorkerThread
ForkJoinPool.defaultForkJoinWorkerThreadFactory
创建的
ForkJoinWorkerThread
现在(错误?)获得了一个不允许的
AccessControlContext无害\u ACC
分配。

链接的错误报告是关于
ForkJoinWorkerThread
的子类的。你是在子类化它吗?另外,JDK-8237117的重点正是不给他们任何权限。感谢你指出——我链接了错误的bug(这里有一些相关的bug);我已经更新了答案。我将把更改的哪些部分(哪些是回归)留给Java人员来决定。链接的bug报告是关于
ForkJoinWorkerThread
的子类的。你是在子类化它吗?另外,JDK-8237117的重点正是不给他们任何权限。感谢你指出——我链接了错误的bug(这里有一些相关的bug);我已经更新了答案。我将留给爪哇人来决定这一变化的哪些部分是有意的(哪些是回归)。