猿问

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:\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)

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


非常感谢。


胡说叔叔
浏览 107回答 1
1回答

阿晨1998

在codeBase您的myPolicy.txt. 您可能还需要在“类”和“*”之间使用斜线。根据PolicyFiles 文档:注意:codeBase 值是一个 URL,因此应始终使用斜杠(绝不是反斜杠)作为目录分隔符,即使代码源实际上位于 Windows 系统上。因此,如果 Windows 系统上代码的源位置实际上是 C:\somepath\api\,则策略 codeBase 条目应如下所示:grant codeBase "file:/C:/somepath/api/" {&nbsp; &nbsp; ...};
随时随地看视频慕课网APP

相关分类

Java
我要回答