Groovy使Spring更出色,第2部分: 在运行时改变应用程序的行为 - 编程入门网
符合预期地工作。至于如何有效地这样做取决于您所处的环境:
系统的关键程度? 如果中断某项内容,会有什么影响? 修复问题的速度有多快? 您的特定环境可能还涉及更多方面的考虑,但是总而言之,bean-refresh 特 性既是强大的,但是又 存在潜在危险。您需要慎重地使用它。可能遇到的两种主要问题是脚本编译错误 和运行时错误。 脚本编译错误 假设您在运行时更改一个脚本,使之不能编译。当 Spring 检测到更改时,它 尝试重新装载 bean, 这时会抛出一个 ScriptCompilationException,后者包装原始的异常,例如一个 Groovy MultipleCompilationErrorsException。当出现这种情况时,Spring 不再尝试重 新装载 bean,原始的 bean 继续使用,就像什么事情也没有发生一样。您的应用程序需要适当地对 ScriptCompilationException 作出响应。很可能,您应该显示某种错误消息,并 向开发人员或操作人员 发送一个通知(例如一条 e-mail 消息或即时消息)。当然,不管是谁部署脚本 更改,都应该监视应用 程序,以确保脚本成功编译,并且新的 bean 替换旧的 bean。 但是没有任何损失,因为没有通过编译的脚本对已经部署的 bean 没有影响。 所以,您可以修复导致 编译异常的问题,然后再次尝试。当 bean 编译成功时,Spring 用新的 bean 替 换已有的 bean,而这 对于应用程序代码来说是透明的。现在,您的更改已经生效,这一切都不需要重 新部署或者重新启动应 用程序。 Groovy使Spring更出色,第2部分: 在运行时改变应用程序的行为(8)时间:2011-08-27 IBM Scott Leberknight运行时脚本错误 运行时脚本错误存在与编译代码抛出的运行时错误一样的问题:它们导致应用 程序出现一个失败条件 ,后者很可能被传播到用户,并导致他们尝试执行的任何动作都失败。例如,假 设您对 GroovyPdfGenerator 作了更改,使之可以编译,但是每当它尝试生成一个 PDF 时都会抛出一个运行时 错误。在此情况下,使用 pdfGenerator 的代码必须要么处理异常,要么传播它 ,并且很有可能,用户 将收到一个错误消息,表明不能生成一个 PDF。(并且这个问题将尽快被修复! ) 但是,和脚本编译错误一样,当出现运行时脚本错误时,并没有带来什么损失 。实际上,由于脚本可 以在运行时更改,与编译过的代码相比,它们更容易被修复。您可以修复脚本中 存在的任何问题,一旦 脚本被重新装载,问题将不复存在。所以,从某种角度来说,在运行时更改代码 的能力不仅在做出更改 方面给予您更大的灵活性,而且也在出现错误时给予您更大的灵活性。但是,这 并不意味着应该让 Spring 应用程序中的所有 bean 都是可刷新的。与很多事情一样,可刷新 bean 最好是适度地使用。 脚本安全性 最后要考虑的重要一点是安全性。保证脚本的安全,并确保只有经过授权的用 户或管理员能够修改它 们,这一点很重要。在某些方面,这与如何确保应用程序其他部分的安全没有区 别。例如,大多数应用 程序需要确保数据的完整性,并使用户只能访问特定于其角色或权限的功能。但 是另一方面,这个功能 也可能为黑客入侵系统并更改数据和系统行为打开新的方便之门。您当然希望减 少应用程序的攻击面, 因此和所有设计上的权衡一样,您必须权衡优点和缺点。 使安全性变得更加重要的是,借助 Spring 的动态语言支持,您不仅可以更改 系统数据,还可以更改 系统行为。在某一程度上确实如此:想想 SQL 注入攻击,这种攻击可注入恶意代 码,还有 JavaScript 跨站点脚本编制,或者跨站点请求伪造攻击,这些攻击可以更改或替换系统的行 为。我认为,您需要知 道如何对 Groovy 脚本进行适当的控制,如果这些脚本是可刷新的,那么更应该 这样做。 取决于如何使用可刷新 bean,随之产生的安全风 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |