从 stark-security 升级到 spring 安全插件
Posted
技术标签:
【中文标题】从 stark-security 升级到 spring 安全插件【英文标题】:Upgrading from stark-security to spring security plugin 【发布时间】:2011-09-14 17:14:46 【问题描述】:我最近将一个项目的 Grails 从 1.0.5 升级到了 1.3.7。项目使用了 Stark-security 插件(0.4.3),我想用 Spring-security 插件(最新)替换它。我知道 Stark-security 在某种程度上基于 Spring-security。
Spring-security 与 Stark-security 有何不同,我应该如何处理和解决问题?
Stark-security 的 static authorizations = [...] 在整个系统中被大量使用,我只是希望我不需要用完全不同的东西重新实现功能..
【问题讨论】:
【参考方案1】:Stark 像 Acegi 插件一样使用 Spring Security 2.0,而较新的 Spring Security Core 插件使用 Spring Security 3,因此它们都使用基本相同的库。
Spring Security Core 中没有类级安全规则配置的概念,但是有多种方法可以指定规则 - 注释(默认)、Config.groovy
中定义所有规则的 Map,以及将规则存储在具有 Requestmap 实例的数据库。这些在http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/的“5 配置请求映射以保护 URL”部分中进行了描述
例如,下面是我如何将 Stark 插件文档中的示例转换为使用 Spring Security Core 的注释:
import grails.plugins.springsecurity.Secured
class BookController
@Secured(['isAuthenticated()'])
def index = Book.list()
@Secured(['ROLE_EDITOR'])
def edit =
// Some logic to edit a book
这两个插件的方法有一个重要区别。如果没有为 URL 定义规则,Stark 会拒绝访问,因此您需要对所有内容进行映射。这更安全,因为如果您添加一个新控制器并忘记映射它,经过身份验证的用户无法访问它,因此很明显有问题。要在 Spring Security Core 中启用此行为,只需添加行
grails.plugins.springsecurity.rejectIfNoRule = true
到grails-app/conf/Config.groovy
【讨论】:
谢谢,我试试这个方法。以上是关于从 stark-security 升级到 spring 安全插件的主要内容,如果未能解决你的问题,请参考以下文章