我最近将项目的Grails从1.0.5升级到1.3.7。 Project中使用了Stark-security插件(0.4.3),我想用Spring-security插件(最新版)替换它。我知道Stark安全性某种程度上基于Spring安全性。
Spring-security与Stark-security有多少不同,我应该如何解决该问题?
整个系统中都大量使用了Stark-security的静态授权= [...],我只是希望我不需要用完全不同的方式重新实现功能。
最佳答案
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/的“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将拒绝访问,因此您需要对所有内容进行映射。这样比较安全,因为如果您添加了一个新的 Controller 却忘记了映射它,则经过身份验证的用户将无法访问它,因此很显然这是有问题的。要在Spring Security Core中启用此行为,只需添加以下行
grails.plugins.springsecurity.rejectIfNoRule = true
到
grails-app/conf/Config.groovy
关于plugins - 从stark-security升级到Spring Security插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6344329/