TPP运行时沙箱机制说明对代码行为的限制。
Java 安全沙箱
安全沙箱(Security Manager)是 Java 平台提供的, 保护特定系统组件和高权限信息接口的保护措施, 当代码访问受限接口时, 会触发 Security manager checkPermission , 如果判定调用来源(caller class)所拥有的权限不满足当前接口的要求, 会抛出异常中断调用, 从而保护 JVM 安全。
对代码行为的限制
TPP 平台对用户代码采用沙箱机制, 限制了部分高危行为。 包括不限于
System.getEnv(禁止获取系统变量)
System.getProperties(禁止遍历获取所有系统属性)
System.getProperty() 获取系统属性(部分允许, 后续文章中更新提供)
new File("/etc/xxx.conf") 读取文件
createClassloader 创建自定义类加载器
因此对用户代码需要避免依赖反射
,类加载器
,本地文件
,环境变量
和属性
, 否则执行过程中会触发沙箱检查, 导致执行异常。
例如以下代码, 会因为访问了受限系统接口, 导致执行中抛异常。
class Demo1 {
public void run() {
System.exit();
System.getProperties();
System.getProperty("xxx.xxx");
}
}
正确地使用TPP官方SDK
平台内置的 SDK, 包含部分 client, 直接通过 new 创建实例会触发安全检查。
正确方式, 调用 SDK 中的 client 创建接口, 获得初始化完毕, 可用的 client , 在安全沙箱中正常使用。
注:以下 client 代码是示意, 具体 client ,请 参考具体 client 文档。
class Demo2 {
public void run() {
EasClient = new SDKEasClient(); // 直接访问了特殊接口, 触发沙箱检查, 抛出异常.
PluginServiceProvider.getInstace().newSDKEasClient(); //平台 sdk 提供初始化的接口, 执行成功
}
}
文档内容是否对您有帮助?