【问题标题】:java security policy doesn't work as expected, always give AccessControlExceptionjava安全策略不按预期工作,总是给AccessControlException
【发布时间】:2019-05-12 17:14:58
【问题描述】:

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

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:\Documents\myproject\mynet\mytest\java\security\target\classes>java -classpath . TestPolic

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

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

grant codeBase "file:D:\Documents\myproject\mynet\mytest\java\security\target\classes*" {
    permission java.io.FilePermission "testPolicy.txt", "read,write";
};

我希望,只要我指定“读,写”权限,它也应该运行良好。但它运行异常:

D:\Documents\myproject\mynet\mytest\java\security\target\classes>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)

我哪里出错了,如何解决?

非常感谢。

【问题讨论】:

    标签: java security exception permissions policy


    【解决方案1】:

    myPolicy.txtcodeBase URL 中使用正斜杠而不是反斜杠。您可能还需要在“类”和“*”之间添加一个斜线。

    根据PolicyFiles documentation

    注意:codeBase 值是一个 URL,因此应始终使用斜杠(绝不是反斜杠)作为目录分隔符,即使代码源实际上位于 Windows 系统上也是如此。因此,如果 Windows 系统上代码的源位置实际上是 C:\somepath\api\,则策略 codeBase 条目应如下所示:

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

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 2021-07-09
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多