JUnit测试中的自定义Java SecurityManager失败

JUnit测试中的自定义Java SecurityManager失败,java,junit,Java,Junit,我正在为沙盒插件使用自定义Java安全管理器。它在独立运行时运行良好,但当我运行单元测试时,会得到一堆AccessControlExceptions。例如 java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader") at java.security.AccessControlContext.checkPermission(AccessControlC

我正在为沙盒插件使用自定义Java安全管理器。它在独立运行时运行良好,但当我运行单元测试时,会得到一堆
AccessControlException
s。例如

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkCreateClassLoader(SecurityManager.java:611)
    at java.lang.ClassLoader.checkCreateClassLoader(ClassLoader.java:274)
    at java.lang.ClassLoader.<init>(ClassLoader.java:316)
    at java.security.SecureClassLoader.<init>(SecureClassLoader.java:76)

事实证明,这个问题与JUnit无关。这只是我的测试运行方式的副作用。此外,还有不止一个问题。我不完全理解这一点,但我有一个解决办法

问题1

在Logback的加载程序中,有一些代码用于检查“getClassLoader”的运行时权限。这会产生一个异常,但显然是意料之中的,让我感到困惑。在这个异常之后,代码将继续运行(我在安全管理器中有一个断点,并且打开了安全调试,我认为这就是问题所在)

问题2


与fork-join池和并行流之间存在某种交互,这给我带来了另一个安全问题。我使用的是一个完整的未来,没有指定我自己的执行人。加上我自己的遗嘱执行人解决了这个问题。老实说,我不知道为什么,即使在阅读了这个bug和链接到文档之后。

你能提供更多的细节,比如测试类和测试失败吗?遗憾的是,我不能让它在一个小的测试应用程序中失败。我会继续努力找到可以复制的小东西。
    Policy.setPolicy(new Policy() {
        @Override
        public PermissionCollection getPermissions(CodeSource cs) {
            Permissions mainPermissions = new Permissions();
            mainPermissions.add(new AllPermission());
            return mainPermissions;
        }
    });
    // set a security manager so permissions get applied,
    System.setSecurityManager(new SecurityManager());