在 Grails 中使用 Spring-Security 前/后注释

2024-05-26

我正在使用 Grails Spring-Security 插件 Spring-Security-Core-1.0.1(它又使用 spring-security-3.0.2.RELEASE)开发 Grails(版本 1.3.3)Web 应用程序。

我想在控制器内的操作上提供基于 Spring-Security 注释的访问控制。

我已经能够使用以下注释成功进行基本身份验证:

@Secured("hasAnyRole('ROLE_USER')")
def list = {
...  
}

这有效 - 提供对list操作/视图仅适用于具有 ROLE_USER 角色的人员。

然而,允许执行某些控制器操作的角色集可能会随着时间的推移而改变,并且是系统整体状态的函数。也就是说,允许执行给定操作的角色集可能由服务或域对象方法返回。

我可能能够做这样的事情的一种方法是使用 Spring-Security 的“基于表达式的访问控制”(@Pre 和 @Post 注释),类似于Spring安全文档 http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#el-pre-post-annotations:

 @PreAuthorize("hasPermission(#contact, 'admin')")
 public void deletePermission(Contact contact, Sid recipient, Permission permission);

在这个用于访问控制决策的示例中,可以使用#contact 语法来访问发送到该方法的对象(例如联系人)。

但是,我无法让 @PreAuthorize(或 @RolesAllowed)注释在 Grails 控制器操作上工作。如果我注释list使用@PreAuthorize(而不是@Secured,如上所述)进行操作,我收到以下错误:

注解 @org.springframework.security.access.prepost.PreAuthorize 元素 FIELD 上不允许

这并不奇怪——操作是一个 Groovy 闭包(具有可执行代码的字段),而不是一个方法。但是,我也尝试在方法上使用注释,从闭包调用,例如:

  def list = {
    testMethod()
    ....
  }

  @PreAuthorize("hasRole('ROLE_USER')")
  public boolean testMethod(){
    println "testMethod succeess"
    return true;
  }

虽然这不会引发任何错误,但它似乎也没有提供任何访问控制。 (无论用户是否具有 ROLE_USER,都会打印“testMethod success”)。

因此,我尝试了一些不同的方法(并阅读了文档),但未能找到一种在 Grails 控制器操作中使用 @PreAuthorize 注释的好方法。这可能吗? Grails 应用程序中是否有更好的方法来使用 Spring-Security-Annotations 来提供作为系统状态函数的访问控制?


您需要使用ACL插件 http://grails.org/plugin/spring-security-acl使用这些注释,但由于您指出的原因,它们不适用于控制器操作。 @Secured 之所以有效,是因为我创建了 Spring Security 注释的副本,该注释允许将其放置在字段以及方法和类上,并且我会查找它们并显式地将它们连接起来。您需要使用从控制器调用的带注释的服务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Grails 中使用 Spring-Security 前/后注释 的相关文章

随机推荐

  • 扩展一个类

    编辑回答 虽然我最初的问题并没有完全按照康拉德 鲁道夫提供的答案所解决的方式解释我的需求 但他 无意或有意 基本上为我写了我想写的内容 类本身不会被扩展 但通过使类了解新函数来扩展其功能 这些新函数允许它 类 处理更广泛的问题 我非常感谢您
  • OpenMP 和 C++:this 指针

    Is thisOpenMP 中始终共享指针 尽管编译器不会抱怨以下代码default none pragma omp parallel for default none shared n for SInt i 0 i lt n i f i
  • 发送fulfillmentText并使用followupEventInput转移到另一个意图

    我使用 Python Flask 设置了一个简单的 Webhook 来处理各种 Dialogflow 功能 在这一点上一切都进展顺利 该机器人通过 DialogFlow API V2 集成到 Facebook Messenger 问题是 关
  • 单击通知时反应本机导航到特定屏幕

    我正在尝试在用户单击他们收到的通知时实现导航 我已成功收到通知expo notifications并接受来自 API 的数据 路由 但当用户单击通知时无法导航到另一个屏幕 使用通知 export default useNotificatio
  • 实现npm包自定义组件VueJS

    我正在尝试使用以下 npm package 来绕过 X frame 选项 https www npmjs com package x frame bypass https www npmjs com package x frame bypa
  • 使用 Swift 在 iOS 和 Android 之间共享核心代码

    我想要的是 使用 Swift 在 Android 和 iOS 之间共享非 UI 代码 问题 Android 具有 NDK 支持 允许您使用 Java 本机接口 JNI 运行 C 和 C 代码 不是 Objective C 我是一名Java程
  • API 调用时出现 UnicodeEncodeError (json)

    我正在尝试打印此 API 调用的结果 但收到 UnicodeEncodeError 可能是超级菜鸟问题 但非常感谢任何帮助 import http client import json api key hidden connection h
  • iframe 内 Web 元素的 QuerySelector

    编辑 新标题 我正在寻找的是 iframe 内元素的 document querySelector 我已经用谷歌搜索了很多答案 最后我被难住了 我正在尝试在 iframe 内查询 我正在构建要在 Selenium 中使用的字符串选择器 通常
  • vs2010 c++ 通过debug查看指针内容

    我正在使用 Vs2010 c 处理 2D 数组 我从一维指针开始 并使用操作 如下 class CMatrix void clear public int nRows int nCols short MyMat CMatrix CMatri
  • 创建索引可以使用现有索引吗?

    我在 A B 和 C 列上有单独的索引 我想在 A B C 三列上创建一个复合索引 我的会有什么影响existing指数对综合指数creation 数据库会利用它们吗 它们是否无关紧要 或者它们会减慢我的新复合索引的创建速度吗 我正在使用
  • valgrind 是如何工作的?

    有人可以快速解释 Valgrind 的工作原理吗 举个例子 它如何知道内存何时被分配和释放 Valgrind 基本上在 沙箱 中运行您的应用程序 在此沙箱中运行时 它能够插入自己的指令来进行高级调试和分析 从手册中 然后 您的程序将在 Va
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • “UITableView”类型的值没有成员“sectionHeaderTopPadding”

    为什么我在 Xcode 12 4 模拟器 ios 14 x 中收到以下代码的构建错误 if available iOS 15 0 myTableView sectionHeaderTopPadding 0 0 error here 错误是
  • 如何将内容放在article.js之上/之上

    So I am trying to create a navigation and footer in the body of the website but the particle js keeps coming over those
  • 使用 Objective-C 将 XMP 数据嵌入到 PNG

    我需要将自定义 XMP 文件嵌入到 iOS 应用程序中的 PNG 中 到目前为止 我能做的就是编译 Adob e XMP 工具包 生成 Xcode 项目 然后正确编译该项目 从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它
  • Xuggler 未转换 .webm 文件?

    我只是尝试使用 Xuggler 将 mov 文件转换为 webm 这应该可以工作 因为 FFMPEG 支持 webm 文件 这是我的代码 IMediaReader reader ToolFactory makeReader home use
  • Apache mod_rewrite:仅当不在本地主机中时才强制 www

    我的 htaccess 中有以下内容来强制 URL 中包含 www RewriteCond HTTP HOST www RewriteRule http www HTTP HOST 1 R 301 L 如果不在本地主机上 我该如何应用它 我
  • 如何使 VS Code 建议片段位于建议列表的顶部?

    我想在 VS Code 中使用代码片段 但是当我输入时 例如 for在 javascript 文件中 IntelliSense 不建议片段 for loop 我需要手动滚动下拉列表并选择它 有没有办法让 VS Code 首先建议片段 UPD
  • 如何提高Canvas渲染性能?

    我必须画很多Shape http msdn microsoft com en us library system windows shapes shape aspx 约 1 20 万 作为 Canvas 2 的子级 我在 WPF 应用程序中
  • 在 Grails 中使用 Spring-Security 前/后注释

    我正在使用 Grails Spring Security 插件 Spring Security Core 1 0 1 它又使用 spring security 3 0 2 RELEASE 开发 Grails 版本 1 3 3 Web 应用程