我有一个Java后端系统,用于处理客户端发送的JSON信息。为了确定应该进行哪种处理,我在JSON中使用了一个名为"字段"
我的后端系统检查"类型"并根据类型执行特定的Java代码。
我没有检查类型并执行硬编码到我的Java类中的代码,而是对探索从外部数据库运行代码的方法感兴趣。这种方式,当我想创建更多"类型"我可以简单地添加处理数据库中每种类型的方法,而不必将新的检查或类硬编码到我的Java文件中并重新编译/部署。
我已经阅读了这篇StackOverFlow帖子:Convert String to Code,但正如评论所指出的那样,只有运行任意代码才会存在重大风险。
理想情况下,我希望有一些外部加载的Java方法,它具有JSON数据的参数,然后它自己进行检查和处理并返回一个值。
是否有安全和(有点)轻松方式执行此操作?也许将字符串解析为java代码并不是正确的想法(也许做一些外部类加载会更聪明),但我想问一下是否有人对如何做到这一点有任何想法。
答案 0 :(得分:1)
如果要执行的代码很短(一行代码),您可以将它作为键值对存储在程序的配置中,其中key是JSON消息中的类型,值是要执行的代码。用Groovy编译单行,你就是。
如果要执行的代码更长,请定义一个接口并创建许多实现。在配置中,将JSON中的类型与类关联。实例化具有已知名称的类只是Class.forName(...).newInstance()
加上错误处理。这还可以让您创建插件 - 只需在类路径中添加一个新的实现类,在配置中添加条目并重新启动应用程序。你可以用Spring和bean来做这件事,但对于一个简单的例子来说,手动操作可能更容易,更快。
这些解决方案是安全的,因为我们假设恶意用户无法更改您的配置或JAR(否则您将陷入深深的麻烦)。
答案 1 :(得分:1)
如果您坚持能够在运行时修改代码,请查看OSGi。您将拥有可以修改以反映更新代码的动态捆绑包,而不是数据库。