具有Spring Security的Grails
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]
具有Person , Authority和Requestmap的示例 :
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种权限:
READ
,WRITE
,CREATE
,DELETE
和ADMINISTRATION
。 您可以根据需要添加自己的权限。 - 标签库(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相关推荐
- Spring Security Java Config Preview--官方
原文地址:[1]https://spring.io/blog/2013/07/02/spring-security-java-config-preview-introduction/ [2]https ...
- pdf secured_使您的Spring Security @Secured注释更干燥
pdf secured 最近,Grails用户邮件列表中的一个用户想知道在定义@Secured注释时如何减少重复 . 在Java批注中指定属性的规则非常严格,因此我看不到直接执行他所要求的方法的方法. ...
- 使您的Spring Security @Secured注释更干燥
最近,Grails用户邮件列表中的一个用户想知道在定义@Secured批注时如何减少重复 . 在Java批注中指定属性的规则非常严格,因此我看不到直接执行他所要求的方法的方法. 使用Groovy并没有 ...
- Spring Security 参考手册(一)
Spring Security 参考手册 Ben AlexLuke TaylorRob WinchGunnar Hillert Spring security 是一个强大的和高度可定制的身份验证和访问 ...
- Spring Security是什么?
Spring Security为基于J2EE企业应用软件提供了全面安全服务. 特别是使用领先的J2EE解决方案-spring框架开发的企业软件项目. 如果你没有使用Spring开发企业软件,我们热情的 ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至: https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc ...
- 【Grails4+spring security】
Grails4+spring security实现单用户登录 描述 1.新建项目目录结构如图所示 2.打开根目录下的build.gradle文件,dependencies中添加spring-secur ...
- spring boot整合spring security笔记
最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...
- Spring Security 实战干货:自定义异常处理
Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...
最新文章
- 通用httpclient生成方式
- java正三角形程序怎么写,java实现正三角形和到正三角形
- 转:Python: 什么是*args和**kwargs
- 重建控制文件--Rebuild controlfile
- linux上scrapy项目的创建,Python网络爬虫4 ---- Linux下编写最简单的scrapy网络爬虫项目...
- 高效开发 — SVN使用教程图文详解【超详细,鼎力推荐】
- python安装reportlab
- 游戏1024设计分析
- Qt系列文章之 Model/View 框架
- 2022年重庆医院三基考试心血管系统疾病多选练习题及答案
- 最新的QQ跳转支付宝并自动领红包脚本。
- 站长紧急:新站要沉得住气
- 深入理解Andorid 卷I 第五章
- mysql lag over_lag函数(lag函数用法)
- 机票预订系统的可行性分析
- IPv6来啦 (by quqi99)
- 2022-2028年中国半导体专用设备行业市场深度分析及投资前景趋势报告
- 软件工程与计算II-9-软件体系结构基础
- 1.pytorch lightning之验证与测试
- 嘴里的零食越吃越香,零食赛道却面临严峻考验