1. Spring Security与Grails集成的概述

Spring Security吹捧了许多身份验证,授权,基于实例的功能以及各种其他功能,这些特性使其对使用安全的应用程序具有极大的吸引力。

考虑到这一点,由于Grails使用了Spring的Inversion of Control Framework和MVC设置,因此开发人员试图使用Spring Security来保护Grails。

这产生了两个值得注意的插件: Spring Security Core插件和Spring Security ACL插件 。

我们将审查这些Spring Security插件的功能,并与将Spring Security用于普通的旧Spring应用程序进行比较。

2. Spring Security Core插件

该插件提供了实用的默认设置以及许多用于自定义的配置选项。

2.1域类

Spring Security Core插件使用默认的Grails域类。 为了对插件使用标准查找,我们至少需要一个Person and Authority域类。

如果要在数据库中存储URL <==>角色映射(这是定义映射的几种方法之一),则需要一个Requestmap域类。 如果我们使用推荐的方法来映射Person和Authority之间的多对多关系,那么我们还需要一个域类来映射联接表。

要使用用户/组查找,我们还需要一个域类。 如果我们使用推荐的方法来映射“ 个人”和“ 组”之间以及“ 组”和“ 授权”之间的多对多关系,则每个域都需要一个域类来映射联接表。 我们仍然可以通过这种方法另外使用Requestmap

我们可以使用s2-quickstart生成域类。 语法非常简单:

grails s2-quickstart DOMAIN_CLASS_PACKAGE USER_CLASS_NAME ROLE_CLASS_NAME [REQUESTMAP_CLASS_NAME] [--groupClassName=GROUP_CLASS_NAME]

具有PersonAuthorityRequestmap的示例

grails s2-quickstart com.ourapp Person Authority Requestmap

2.2配置请求映射以保护URL

我们可以选择以下方法来配置请求映射以保护URL:

  • @Secured批注。 这被认为是默认方法。
  • application.groovy中的Map。 这称为静态地图
  • 存储在数据库中的 Requestmap 域类实例

我们一次只能使用一种方法。

例如,这里使用@Secured批注和Spring Expression Language(SpEL):

class SecureController {@Secured("hasRole('ROLE_USER')")def someRandomAction() {...}

2.3其他各种功能

Spring Security Core插件的一些各种功能包括:

  • 用于处理较低级别的Spring Security的帮助程序类,例如SecurityTagLib ,它提供GSP标签以支持基于用户是否通过身份验证和/或具有执行特定操作所需的角色的条件显示。
  • 事件–包括事件通知,事件侦听器和回调关闭。
  • 过滤器,包括定义将哪些过滤器应用于不同的URL模式的功能。

3. Spring Security ACL插件

Spring Security ACL插件向使用上述Spring Security Core插件的Grails应用程序添加了域对象安全支持。 因此,我们需要在build.gradle中已有其他插件。

添加域对象安全性支持是什么意思? Spring Security Core插件和其他扩展插件支持通过规则来限制对URL的访问,这些规则包括检查用户的身份验证状态,角色等。ACL插件通过添加对限制访问各个域类实例的支持来扩展此功能。

3.1方法安全性

Spring Security中通常提供的四个注释可与Spring Expression Language(SpEL)表达式一起使用,以执行基于表达式的访问控制 :

  • @PreAuthorize
  • @PreFilter
  • @PostAuthorize
  • @PostFilter

以上注释全部记录在Spring Security文档的“ 方法安全性表达式”部分中。

使用方法安全性的能力是Spring Security ACL插件和Spring Security Core插件之间的非常重要的区别。 如果要实现细粒度的访问控制,则出于这个原因,必须使用Spring Security ACL插件。

值得庆幸的是,除了Groovy和Java之间的语法差异之外,该代码实际上看起来是相同的:

@PreAuthorize("hasRole('ROLE_USER')")@PostFilter("hasPermission(filterObject, read) or " +"hasPermission(filterObject, admin)")List getAllDocs(params = [:]) {Report.list(params)}

3.2域类

像Spring Security Core插件一样,Spring Security ACL插件使用域类进行适当的结构化。

在这种情况下,域类用于管理数据库状态。 为了与通常基于JDBC的Spring Security代码兼容,将创建域类以生成表名和列名。

该插件中与持久性关联的类使用这些类。 但是,可以通过运行s2-create-acl-domains脚本来覆盖它们:

grails s2-create-acl-domains

因此,该脚本将在应用程序的grails-app/domain文件夹中生成相同的域类,以进行一些自定义。

3.3各种其他功能

Spring Security ACL插件的一些各种功能包括:

  • 身份验证运行替换:这是一个临时身份验证开关,仅持续进行一次方法调用。
  • 自定义权限: BasePermission类提供5种权限: READWRITECREATEDELETEADMINISTRATION 。 您可以根据需要添加自己的权限。
  • 标签库(taglib)用于允许和拒绝。

4。结论

Spring Security Core插件提供了许多非常有用的功能,用于通过Spring Security保护Grails,但是为了实现更复杂,更细粒度的授权,必须结合使用Spring Security ACL插件。

推荐读物: 基于创建者的授权资源(Spring Security)以及我关于Spring框架的文章,以获取有关Spring的一般知识。

翻译自: https://www.javacodegeeks.com/2019/01/grails-spring-security.html

具有Spring Security的Grails相关推荐

  1. Spring Security Java Config Preview--官方

    原文地址:[1]https://spring.io/blog/2013/07/02/spring-security-java-config-preview-introduction/ [2]https ...

  2. pdf secured_使您的Spring Security @Secured注释更干燥

    pdf secured 最近,Grails用户邮件列表中的一个用户想知道在定义@Secured注释时如何减少重复 . 在Java批注中指定属性的规则非常严格,因此我看不到直接执行他所要求的方法的方法. ...

  3. 使您的Spring Security @Secured注释更干燥

    最近,Grails用户邮件列表中的一个用户想知道在定义@Secured批注时如何减少重复 . 在Java批注中指定属性的规则非常严格,因此我看不到直接执行他所要求的方法的方法. 使用Groovy并没有 ...

  4. Spring Security 参考手册(一)

    Spring Security 参考手册 Ben AlexLuke TaylorRob WinchGunnar Hillert Spring security 是一个强大的和高度可定制的身份验证和访问 ...

  5. Spring Security是什么?

    Spring Security为基于J2EE企业应用软件提供了全面安全服务. 特别是使用领先的J2EE解决方案-spring框架开发的企业软件项目. 如果你没有使用Spring开发企业软件,我们热情的 ...

  6. Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】

    源码请移步至: https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc ...

  7. 【Grails4+spring security】

    Grails4+spring security实现单用户登录 描述 1.新建项目目录结构如图所示 2.打开根目录下的build.gradle文件,dependencies中添加spring-secur ...

  8. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

  9. Spring Security 实战干货:自定义异常处理

    Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...

最新文章

  1. 通用httpclient生成方式
  2. java正三角形程序怎么写,java实现正三角形和到正三角形
  3. 转:Python: 什么是*args和**kwargs
  4. 重建控制文件--Rebuild controlfile
  5. linux上scrapy项目的创建,Python网络爬虫4 ---- Linux下编写最简单的scrapy网络爬虫项目...
  6. 高效开发 — SVN使用教程图文详解【超详细,鼎力推荐】
  7. python安装reportlab
  8. 游戏1024设计分析
  9. Qt系列文章之 Model/View 框架
  10. 2022年重庆医院三基考试心血管系统疾病多选练习题及答案
  11. 最新的QQ跳转支付宝并自动领红包脚本。
  12. 站长紧急:新站要沉得住气
  13. 深入理解Andorid 卷I 第五章
  14. mysql lag over_lag函数(lag函数用法)
  15. 机票预订系统的可行性分析
  16. IPv6来啦 (by quqi99)
  17. 2022-2028年中国半导体专用设备行业市场深度分析及投资前景趋势报告
  18. 软件工程与计算II-9-软件体系结构基础
  19. 1.pytorch lightning之验证与测试
  20. 嘴里的零食越吃越香,零食赛道却面临严峻考验

热门文章

  1. 【树状数组】【dfs】树
  2. [集训队作业2018] 万圣节的积木(李超线段树)
  3. 两个月拿到N个offer,看看我是如何做到的
  4. JavaFX图表(五)之气泡图
  5. JavaFX官方教程(四)之Hello World,JavaFX样式
  6. 你可能不知道的 10 条 SQL 技巧
  7. JavaFX之TableView
  8. 班级日常分享,一天一瞬间
  9. java中实现将一个数字字符串转换成逗号分隔的数字串, 即从右边开始每三个数字用逗号分隔
  10. JS中函数的prototype属性和对象的__proto__属性