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文件,但它仍然不起作用.