javascript
具有Spring Security的Grails
1. Spring Security與Grails集成的概述
Spring Security吹捧了許多身份驗證,授權(quán),基于實例的功能以及各種其他功能,這些特性使其對使用安全的應(yīng)用程序具有極大的吸引力。
考慮到這一點,由于Grails使用了Spring的Inversion of Control Framework和MVC設(shè)置,因此開發(fā)人員試圖使用Spring Security來保護Grails。
這產(chǎn)生了兩個值得注意的插件: Spring Security Core插件和Spring Security ACL插件 。
我們將審查這些Spring Security插件的功能,并與將Spring Security用于普通的舊Spring應(yīng)用程序進行比較。
2. Spring Security Core插件
該插件提供了實用的默認設(shè)置以及許多用于自定義的配置選項。
2.1域類
Spring Security Core插件使用默認的Grails域類。 為了對插件使用標準查找,我們至少需要一個Person and Authority域類。
如果要在數(shù)據(jù)庫中存儲URL <==>角色映射(這是定義映射的幾種方法之一),則需要一個Requestmap域類。 如果我們使用推薦的方法來映射Person和Authority之間的多對多關(guān)系,那么我們還需要一個域類來映射聯(lián)接表。
要使用用戶/組查找,我們還需要一個組域類。 如果我們使用推薦的方法來映射“ 個人”和“ 組”之間以及“ 組”和“ 授權(quán)”之間的多對多關(guān)系,則每個域都需要一個域類來映射聯(lián)接表。 我們?nèi)匀豢梢酝ㄟ^這種方法另外使用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 Requestmap2.2配置請求映射以保護URL
我們可以選擇以下方法來配置請求映射以保護URL:
- @Secured批注。 這被認為是默認方法。
- application.groovy中的Map。 這稱為靜態(tài)地圖
- 存儲在數(shù)據(jù)庫中的 Requestmap 域類實例
我們一次只能使用一種方法。
例如,這里使用@Secured批注和Spring Expression Language(SpEL):
class SecureController {@Secured("hasRole('ROLE_USER')")def someRandomAction() {...}2.3其他各種功能
Spring Security Core插件的一些各種功能包括:
- 用于處理較低級別的Spring Security的幫助程序類,例如SecurityTagLib ,它提供GSP標簽以支持基于用戶是否通過身份驗證和/或具有執(zhí)行特定操作所需的角色的條件顯示。
- 事件–包括事件通知,事件偵聽器和回調(diào)關(guān)閉。
- 過濾器,包括定義將哪些過濾器應(yīng)用于不同的URL模式的功能。
3. Spring Security ACL插件
Spring Security ACL插件向使用上述Spring Security Core插件的Grails應(yīng)用程序添加了域?qū)ο蟀踩С帧?因此,我們需要在build.gradle中已有其他插件。
添加域?qū)ο蟀踩灾С质鞘裁匆馑?#xff1f; Spring Security Core插件和其他擴展插件支持通過規(guī)則來限制對URL的訪問,這些規(guī)則包括檢查用戶的身份驗證狀態(tài),角色等。ACL插件通過添加對限制訪問各個域類實例的支持來擴展此功能。
3.1方法安全性
Spring Security中通常提供的四個注釋可與Spring Expression Language(SpEL)表達式一起使用,以執(zhí)行基于表達式的訪問控制 :
- @PreAuthorize
- @PreFilter
- @PostAuthorize
- @PostFilter
以上注釋全部記錄在Spring Security文檔的“ 方法安全性表達式”部分中。
使用方法安全性的能力是Spring Security ACL插件和Spring Security Core插件之間的非常重要的區(qū)別。 如果要實現(xiàn)細粒度的訪問控制,則出于這個原因,必須使用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插件使用域類進行適當?shù)慕Y(jié)構(gòu)化。
在這種情況下,域類用于管理數(shù)據(jù)庫狀態(tài)。 為了與通常基于JDBC的Spring Security代碼兼容,將創(chuàng)建域類以生成表名和列名。
該插件中與持久性關(guān)聯(lián)的類使用這些類。 但是,可以通過運行s2-create-acl-domains腳本來覆蓋它們:
grails s2-create-acl-domains因此,該腳本將在應(yīng)用程序的grails-app/domain文件夾中生成相同的域類,以進行一些自定義。
3.3各種其他功能
Spring Security ACL插件的一些各種功能包括:
- 身份驗證運行替換:這是一個臨時身份驗證開關(guān),僅持續(xù)進行一次方法調(diào)用。
- 自定義權(quán)限: BasePermission類提供5種權(quán)限: READ , WRITE , CREATE , DELETE和ADMINISTRATION 。 您可以根據(jù)需要添加自己的權(quán)限。
- 標簽庫(taglib)用于允許和拒絕。
4。結(jié)論
Spring Security Core插件提供了許多非常有用的功能,用于通過Spring Security保護Grails,但是為了實現(xiàn)更復(fù)雜,更細粒度的授權(quán),必須結(jié)合使用Spring Security ACL插件。
推薦讀物: 基于創(chuàng)建者的授權(quán)資源(Spring Security)以及我關(guān)于Spring框架的文章,以獲取有關(guān)Spring的一般知識。
翻譯自: https://www.javacodegeeks.com/2019/01/grails-spring-security.html
總結(jié)
以上是生活随笔為你收集整理的具有Spring Security的Grails的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jenkins部署java_在Windo
- 下一篇: Win10电脑怎么定闹钟?Win10设置