【问题标题】:Using Shiro to secure services in grails使用 Shiro 保护 grails 中的服务
【发布时间】:2011-01-12 14:14:04
【问题描述】:

我正在使用 grails 构建一个主要用作服务框架的应用程序。我的问题是:服务能否以与控制器相同的方式得到保护?

基于uri的示例:

class SecurityFilters {
  def filters = {
    all(uri: "/**") {
      before = {
        // Ignore direct views (e.g. the default main index page).
        if (!controllerName) return true
        // Access control by convention. 
        accessControl()
      }
    } 
  } 
}

【问题讨论】:

    标签: grails groovy service soa shiro


    【解决方案1】:

    我不知道 Shiro 插件是否支持这一点,但 Acegi plugin 支持,尽管是以“实验性”方式(无论这意味着什么)。

    更新

    正确阅读问题后,您似乎在询问是否可以使用过滤器来保护服务。如果是这种情况,那么 Shiro 就有点无关紧要了,因为执行授权的是过滤器,而不是 Shiro。

    因此,要回答您是否可以使用过滤器来保护服务的问题,答案是否定的,因为您只能从过滤器中访问控制器。但是,您可以使用 Groovy 元编程对服务进行 AOP 风格的方法拦截。

    基本做法是:

    • 对于每个服务,将 invokeMethod 属性添加到 MetaClass
    • 该属性的值应该是一个闭包。这个闭包将拦截(即被调用而不是调用)服务上调用的每个方法。
    • 此关闭应
      • 执行安全检查
      • 如果授权成功则调用原始方法,如果授权失败则抛出异常(或显示错误)

    一边

    如果可能的话,我强烈建议使用经过验证的安全插件(例如 Shiro、Acegi)来执行授权检查,而不是按照上述方式自行滚动。

    【讨论】:

    • 谢谢。我用的是shiro,不是acegi。我想利用过滤来保护服务。抱歉,如果不清楚。
    • 感谢您的精彩建议。
    猜你喜欢
    • 2013-12-29
    • 2016-10-08
    • 2012-02-05
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2012-08-03
    • 2013-05-24
    相关资源
    最近更新 更多