我需要创建一个环境来运行可能不受信任的代码。程序只允许连接到预配置的地址:端口,除此之外不能执行其他操作(甚至无法读取系统时间)。我已经编译了类白名单。我搜索了类似的问题,但只找到基于SecurityManager的模板,而我所知道的是它已经过时了。 请问有人能给我一个简单的示例,如何基于安全策略和AccessController在沙盒中运行代码?
重要提示 — 自从Java 17版本起,策略文件和安全管理器已被弃用并标记为将来移除。这篇博文解释了如何处理安全管理器后的沙盒问题。
-Djava.security.manager
如果省略此参数,将完全没有沙盒。
其次,您需要告知策略文件的位置:
-Djava.security.policy=
这将在您的Java主目录中添加您的权限,以及已经定义的权限。原始的沙盒规则位于.../jre/lib/security/java.policy。然而,如果您希望您的策略是唯一的,您需要使用双等号"=="。这样,您完全控制允许的内容。-Djava.security.policy==
我建议您使用Java附带的"policytool"工具。它相当基础,但可以帮助您快速编写正确语法的策略文件。