java 安全策略无法按预期工作,请始终提供 AccessControlException



首先,我有一个工作代码:

import java.io.FileWriter;
import java.io.IOException;
public class TestPolicy {
public static void main(String[] args) {
FileWriter writer;
try {
writer = new FileWriter("testPolicy.txt");
writer.write("hello1");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

它与运行良好

D:Documentsmyprojectmynetmytestjavasecuritytargetclasses>java -classpath . TestPolic

它将生成一个名为[testPolicy.txt]的新文件

然后我加了一个..//src/myPolicy.txt,内容:

grant codeBase "file:D:Documentsmyprojectmynetmytestjavasecuritytargetclasses*" {
permission java.io.FilePermission "testPolicy.txt", "read,write";
};

我希望,只要我指定了"读、写"权限,它也应该运行良好。但它运行时有一个例外:

D:Documentsmyprojectmynetmytestjavasecuritytargetclasses>java -classpath . -Djava.security.manager -Djava.security.policy=../../src/myPolicy.txt TestPolicy
Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "testPolicy.txt" "write")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkWrite(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileWriter.<init>(Unknown Source)
at TestPolicy.main(TestPolicy.java:8)

我哪里出了问题,如何解决?

非常感谢。

myPolicy.txtcodeBaseURL中使用正斜杠而不是反斜杠。您可能还需要在"classes"one_answers"*"之间使用斜线。

根据PolicyFiles文档:

注意:codeBase值是一个URL,因此应该始终使用斜杠(从不使用反斜杠(作为目录分隔符,即使代码源实际上在Windows系统上也是如此。因此,如果Windows系统上代码的源位置实际上是C:\somepath\api\,那么策略codeBase条目应该看起来像:

grant codeBase "file:/C:/somepath/api/" {
...
};

相关内容

  • 没有找到相关文章

最新更新