使用IntelliJ IDEA运行JUnit测试时出现"java.security.AccessControlException"错误

6

我正在尝试使用IntelliJ Idea 11.1运行JUnit测试。但是这些测试会出现不同的AccessControlExceptions。其中一个如下所示。但这些测试在Eclipse中可以毫无问题地运行。

Exception in thread "main" java.security.AccessControlException: access denied (java.lang.RuntimePermission setIO)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.System.checkIO(System.java:225)
    at java.lang.System.setOut(System.java:147)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

我需要为 IDEA 测试运行器设置特殊权限吗?如果需要,应该如何设置?


你是从菜单中运行它们吗?你是使用Spring来运行它们还是只是简单的JUnit?另外,你在测试中使用System.out...吗?看起来有些东西正在尝试从堆栈跟踪中设置它。 - RNJ
1
你是否使用自定义的-Djava.security.policy运行? - CrazyCoder
@user846476 是的。我正在使用菜单中的运行命令来运行它们。这是简单的JUnit。我检查了测试文件,没有System.out...s。 - Nufail
是的,我现在正在使用Ant,它运行良好。在IDEA中让它工作会更容易。考虑到它在Eclipse中也可以直接使用,这一定是IDEA的问题。我会在新安装的环境中进行测试。谢谢。 - Nufail
你最终解决了这个问题吗?我也在尝试在IntelliJ中添加安全策略。在IDE中无法工作,但在命令行中可以。 - cloudsurfin
显示剩余3条评论
3个回答

2

我自己也遇到了这个问题,为了让事情至少能运行起来,我从<jdk>/jre/lib/security中复制了java.policy文件,并在默认的grant中添加了以下权限,以便在IntelliJ IDEA 2016.2下运行测试:

    // To get tests working under IntelliJ 2016.2
    permission java.util.PropertyPermission "idea.launcher.bin.path", "read";
    permission java.lang.RuntimePermission "loadLibrary.C:\\Program Files (x86)\\JetBrains\\IntelliJ IDEA 2016.2\\bin\\breakgen64.dll";
    permission java.util.PropertyPermission "idea.launcher.port", "read";
    permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
    permission java.util.PropertyPermission "idea.is.junit5", "read";
    permission java.net.SocketPermission "127.0.0.1:*", "connect,resolve";
    permission java.util.PropertyPermission "user.home", "read";
    permission java.io.FilePermission "C:\\Users\\Mark\\junit.properties", "read";
    permission java.lang.RuntimePermission "setIO";
    permission java.io.FilePermission "C:\\Users\\Mark\\AppData\\Local\\Temp\\*", "read";
    permission java.lang.RuntimePermission "accessDeclaredMembers";

您需要更改一些路径以适应您特定的用户需求。 但我还没有完全完成这些更改:似乎我仍然缺少一些特定于我的代码的权限(具体来说:从我的代码中读取许多属性文件)。


2
创建一个文件C:\utils\grant_all.policy,内容为"最初的回答"。
// Grant everyone all permissions:
grant {
 permission java.security.AllPermission;
};

"最初的回答":在IntelliJ中添加调试配置,包括图示

1

由于我不太想在JVM上授予所有权限,因此我更新了Mark Rotteveel的解决方案,以允许在IntelliJ中进行调试。只需要三个额外的权限:

permission java.util.PropertyPermission "idea.launcher.bin.path", "read";
    permission java.lang.RuntimePermission "loadLibrary.C:\\Program Files\\JetBrains\\IntelliJ IDEA Community Edition 2019.2\\bin\\breakgen64.dll";
    permission java.util.PropertyPermission "idea.launcher.port", "read";
    permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
    permission java.util.PropertyPermission "idea.is.junit5", "read";
    permission java.net.SocketPermission "127.0.0.1:*", "connect,resolve";
    permission java.util.PropertyPermission "user.home", "read";
    permission java.io.FilePermission "C:\\Users\\David\\junit.properties", "read";
    permission java.lang.RuntimePermission "setIO";
    permission java.io.FilePermission "C:\\Users\\David\\AppData\\Local\\Temp\\*", "read";
    permission java.lang.RuntimePermission "accessDeclaredMembers";

    // Additional properties needed to allow debugging in IntelliJ
    permission java.io.FilePermission "C:\\Program Files\\JetBrains\\IntelliJ IDEA Community Edition 2019.2\\bin\\breakgen64.dll", "read";
    permission java.util.PropertyPermission "intellij.debug.agent", "read";
    permission java.util.PropertyPermission "intellij.debug.agent", "write";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接