grails - 使用Shiro确保Grails中的服务安全

标签 grails groovy service soa shiro

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

基于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()
      }
    } 
  } 
}

最佳答案

我不知道Shiro插件是否支持此功能,但Acegi plugin可以支持,尽管是以“实验”方式(无论如何)。

更新

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

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

基本方法是:

  • 对于每个服务,将invokeMethod属性添加到MetaClass
  • 该属性的值应为Closure。此关闭操作将拦截(即代替调用)服务上调用的每个方法。
  • 此关闭应该
  • 执行安全检查
  • 如果授权成功,则调用原始方法,如果授权失败,则引发异常(或显示错误)

  • 除了

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

    关于grails - 使用Shiro确保Grails中的服务安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191615/

    相关文章:

    grails - 从 Groovy 类调用 grails 插件闭包

    Groovy - 如何将 json 转换为精确类型列表

    c# - 在控制台应用程序中包装 C# 服务以对其进行调试

    c++ - 我怎样才能让我的 linux 服务触发我的信号?

    android - 如何将消息从 Activity 发送到服务并在服务运行时执行?

    java - 我应该使用哪个框架(Grails、Java/Spring)?

    grails - 组合来自 params 数组的标准

    grails - 访问自动生成的字段并查询

    java - 运行groovy脚本时intellij构建java项目

    android - Gradle buildType/productFlavor 使用意外的 buildConfigField