繁体   English   中英

使用 IntelliJ IDEA 运行 JUnit 测试 - “java.security.AccessControlException”

[英]Running JUnit tests with IntelliJ IDEA - "java.security.AccessControlException"

我正在尝试使用 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 测试运行程序设置某种特殊权限? 如果是这样怎么办?

我自己遇到了这个问题,至少为了让事情运行起来,我从<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";

您将需要更改一些路径以满足您的特定用户需求。 通过这些更改,我还没有完全完成:我似乎仍然缺少一些特定于我自己的代码的权限(特别是:从我自己的代码中读取一些属性文件)。

创建一个包含内容的文件 C:\utils\grant_all.policy

// Grant everyone all permissions:
grant {
 permission java.security.AllPermission;
};

在 IntelliJ 中添加调试配置

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

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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM