有没有一种方法可以在Windows Server 2008上运行Java虚拟机(java.exe
),并使用命令行参数或系统变量禁用所有网络连接?
有没有一种方法可以在Windows Server 2008上运行Java虚拟机(java.exe
),并使用命令行参数或系统变量禁用所有网络连接?
您可以通过启用默认的Java安全管理器来实现此目的。默认情况下,不执行任何安全措施,因此您被允许执行任何操作,但如果启用了安全管理器,则会限制网络访问、文件访问以及许多其他事项,除非在安全策略文件中另有规定。
要启用默认安全管理器,请在启动JVM时传递此参数。
java -Djava.security.manager=default my.main.Class
通过这样做,来自JVM内部的任何网络访问尝试都会抛出java.net.NetPermission
。
这也会破坏像文件访问这样的东西,因此如果您需要允许它,则需要在特殊的安全策略文件中指定这些内容 (-Djava.security.policy=path/to/policy.file
)。应该有很多设置示例,只需搜索“java权限”即可开始。
我需要翻译的内容是:
我有一个任务,需要为我们的产品测试离线安装程序。之前说的几乎都是正确的,但是第一次创建.policy文件并不容易。以下是我的操作步骤:
创建了一个通用的policy文件,没有解析主机名的权限(见下面的代码片段);
在JVM参数中添加了-Djava.security.manager -Djava.security.policy=pathto/policy.file
;
通用的.policy文件内容如下:
grant {
permission java.io.FilePermission "<<ALL FILES>>", "read,write,execute,delete";
permission java.util.PropertyPermission "*", "read,write";
permission java.lang.RuntimePermission "*";
permission java.net.NetPermission "*";
permission java.lang.reflect.ReflectPermission "*";
};
如果在测试期间尝试获取内容外部的任何内容,都会因为安全异常而失败。
虽然我没有尝试过,但理论上你可以将系统属性设置为不存在的SOCKS代理,根据文档,所有TCP sockets都会尝试通过SOCKS代理 - 并失败。
像这样:
java -DsocksProxyHost=127.0.0.1 SomeClass