如何使用 Java 策略文件

问题描述 投票:0回答:1

我是一个允许任何人上传自己的产品(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 时给出,在哪里可以找到权限列表及其参数? (权限 java.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

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

java java-security java-security-manager
1个回答
0
投票

您不传递任何 VM 参数来启用安全管理器。

您当前的命令行是:

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

这意味着,

-Djava.security.manager -Djava.security.policy=...
作为程序参数传递,而不是 VM 参数。

VM 参数必须出现在

-jar file
classname
之前。
之后的参数被视为程序参数并作为
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";
};

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

© www.soinside.com 2019 - 2024. All rights reserved.