将自定义Java安全策略文件传递给surefire maven测试失败,导致所有内容的访问控制错误

ada*_*dev 5 java security surefire maven

我正在尝试将自定义安全策略文件传递给surefire以运行一些测试.(具体来说,我在java.lang中添加类来测试分析器,我希望在那里定义类的权限.)

我不确定我的问题是关于安全策略,还是我正在传递给确定的args.

按照Maven的文档在这里,我有这样的插件配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.18.1</version>
        <configuration>
            <argLine>-Djava.security.manager -Djava.security.policy==java.policy</argLine>
        </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

我尝试过file://文件路径和其他变体.

注意==对语法-Djava.security.policy==java.policy是正确的,根据此Oracle文档

如果你使用

java -Djava.security.manager -Djava.security.policy == someURL SomeApp(注意双等号)然后只使用指定的策略文件; 安全属性文件中指示的所有内容都将被忽略.

这是我的安全策略文件:

grant codeBase "file:${{java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};

grant {
    permission java.lang.RuntimePermission "defineClassInPackage.java.lang";
    permission java.security.AllPermission;
    permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
Run Code Online (Sandbox Code Playgroud)

如果我没有指定策略args,我会得到一个AccessControlError尝试在java.lang中定义一个类,如预期的那样.

如果我添加策略args,就好像我清除了所有授权策略,测试在访问文件时失败 - 我想它在尝试的第一个访问控制上失败了:

java.security.AccessControlException: access denied ("java.io.FilePermission" "/Users/me/myproj/target/surefire/surefire_03237249516701375492tmp" "read")

更新:我尝试使用没有maven/surefire的简单主类,但我仍然遇到此错误.我认为java.*可能会忽略安全策略,因为在SecureClassLoader中有一些代码:

    if ((name != null) && name.startsWith("java.")) {
        throw new SecurityException
            ("Prohibited package name: " +
             name.substring(0, name.lastIndexOf('.')));
    }
Run Code Online (Sandbox Code Playgroud)

我还尝试在JAVA_HOME/jre/lib/security中编辑JDK的java.policy文件,但它仍然不起作用.