为什么codeforces、leetcode等OnlineJudge不允许java提交自建classloader?

Why does OnlineJudge, such as codeforces and leetcode, not allow java submit to self built classloader?

例如,当

new classloader() {};

Java.security.accesscontrolexception 会被抛出。 OJ 允许提交者构建自己的类加载器是否存在任何风险?函数 defineclass() 有其他替代方法吗?

安全策略与代码位置相关联。由于 ClassLoader 可以为其定义的 类 指定代码位置,因此它可以规避应用于其自身代码位置的限制。

当您使用 MethodHandles.lookup().defineClass(…) you can only create classes within your own context, hence, not use it to expand your privileges. Therefore, you can use it even when a security manager is installed, as long as your lookup object has the necessary full privileges.

因此,当我 运行 JDK 14 或更高版本
下的 示例时 -Djava.security.manager 选项,它 运行 无需任何权限即可顺利进行。

所以当提到在线执行环境运行在JDK 14或更新版本时,您可以使用此方法进行动态代码生成。