我是一个平台的所有者,允许任何人上传自己的产品(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
我已经尝试使用其他权限,他们没有影响程序也。
1条答案
按热度按时间w7t8yxp51#
您不需要传递任何VM参数来启用安全管理器。
当前命令行为:
这意味着,
-Djava.security.manager -Djava.security.policy=...
作为程序参数而不是VM参数传递。VM参数必须出现在
-jar file
或classname
之前。之后的参数被视为程序参数,并作为
args
传递给main方法。要修复此问题,请使用
则策略文件的格式不正确。
在
"
中,需要使用\\
对\
进行转义。此外,代码库不使用相对文件名,而是使用文件URL。
因此,策略文件应如下所示:
如果策略文件包含错误,则可能根本不使用它,从而使调试变得困难。