如何使用Java策略文件

1l5u6lss  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(102)

我是一个平台的所有者,允许任何人上传自己的产品(jar文件),我正在寻找使用java策略文件的平台安全。
我使用的是JRE azul-1.8.9_345,
我在用这个程序测试,

public static void main(String[] args) {
        String url = "http://www.java2s.com/Code/JarDownload/test/test.jar.zip";

        try {
            download(url, "C:\\Users\\User\\Desktop\\Test.jar");
        } catch (IOException exception) {
            exception.printStackTrace();
        }
    }

    private static void download(String urlStr, String file) throws IOException{
        URL url = new URL(urlStr);
        BufferedInputStream bis = new BufferedInputStream(url.openStream());
        FileOutputStream fis = new FileOutputStream(file);
        byte[] buffer = new byte[1024];
        int count=0;
        while((count = bis.read(buffer,0,1024)) != -1)
        {
            fis.write(buffer, 0, count);
        }
        fis.close();
        bis.close();
    }

我想使用策略文件阻止此程序运行,
到目前为止,我的尝试都没有成功,我开始怀疑这可能是一个不受支持的功能,它可能不再工作了。
这是我的政策

grant CodeBase "file:HelloWorld.jar" {
    permission java.io.FilePermission "C:\Users\User\Desktop\", "read";
};

我试过使用其他权限,但他们似乎什么也不做,我感谢帮助。
有人能布局,为什么这不工作?,为什么我需要指定文件?,即使当我运行jar时给定,在哪里可以找到权限列表和它们的参数?(permissionjava.io.ExamplePermission(args),(args))

Launcher\files\azul-1.8.9_345\bin\java.exe -jar HelloWorld.jar -Djava.security.manager -Djava.security.policy=C:\Users\User\Desktop\policy.policy

我已经尝试使用其他权限,他们没有影响程序也。

w7t8yxp5

w7t8yxp51#

您不需要传递任何VM参数来启用安全管理器。
当前命令行为:

java -jar HelloWorld.jar -Djava.security.manager -Djava.security.policy=...

这意味着,-Djava.security.manager -Djava.security.policy=...作为程序参数而不是VM参数传递。
VM参数必须出现在-jar fileclassname之前。
之后的参数被视为程序参数,并作为args传递给main方法。
要修复此问题,请使用

Launcher\files\azul-1.8.9_345\bin\java.exe -Djava.security.manager -Djava.security.policy=C:\Users\User\Desktop\policy.policy -jar HelloWorld.jar

则策略文件的格式不正确。
"中,需要使用\\\进行转义。
此外,代码库不使用相对文件名,而是使用文件URL。
因此,策略文件应如下所示:

grant codebase "file:/C:/Users/User/Desktop/HelloWorld.jar" {
    permission java.io.FilePermission "C:\\Users\\User\\Desktop\\-", "read";
};

如果策略文件包含错误,则可能根本不使用它,从而使调试变得困难。

相关问题