0

我有一个处理客户端发送的 JSON 信息的 Java 后端系统。为了确定应该进行哪种处理,我在 JSON 中使用了一个名为“type”的字段

我的后端系统检查“类型”并根据类型执行特定的 Java 代码。

我没有检查类型并执行硬编码到我的 Java 类中的代码,而是有兴趣探索从外部数据库运行代码的方法。这样,当我想创建更多“类型”时,我可以简单地添加处理数据库中每种类型的方法,而不必将新的检查或类硬编码到我的 Java 文件中并重新编译/部署。

我已经阅读了这篇 StackOverFlow 帖子:Convert String to Code,但正如评论所指出的那样,仅运行任意代码就存在重大风险。

理想情况下,我希望有一些从外部加载的 Java 方法,该方法具有 JSON 数据的参数,然后它自己进行检查和处理并返回一个值。

有没有安全(有点)简单的方法来做到这一点?也许将字符串解析为java代码不是正确的想法(也许做一些外部类加载会更聪明),但我想问是否有人对如何做到这一点有任何想法。

4

2 回答 2

1

如果要执行的代码很短(一行左右),您可以将其作为键值对存储在程序的配置中,其中 key 是 JSON 消息中的类型, value 是要执行的代码执行。用 Groovy 编译单行代码就可以了。

如果要执行的代码较长,则定义一个接口并创建多个实现。在配置中,将 JSON 中的类型与类相关联。实例化具有已知名称的类只是Class.forName(...).newInstance()加上错误处理。这也可以让您创建插件 - 只需在类路径中放置一个新的实现类,在配置中添加条目并重新启动应用程序。您可能可以使用 Spring 和 bean 来执行此操作,但对于一个简单的情况,手动执行此操作可能更容易、更快。

这些解决方案是安全的,因为我们假设恶意用户无法更改您的配置或 JAR(否则您将陷入困境)。

于 2012-05-16T16:51:10.773 回答
1

啊,好旧的软编码。我建议您在走这条路之前阅读http://thedailywtf.com/Articles/Soft_Coding.aspx 。

如果您坚持能够在运行时修改代码,请查看 OSGi。您将拥有可以修改以反映更新代码的动态包,而不是数据库。

于 2012-05-16T16:51:39.903 回答