我最近将项目的Grails从1.0.5升级到1.3.7。 Project正在使用Stark-security插件(0.4.3),我想用Spring-security插件(最新版)替换它。我知道Stark-security在某种程度上基于Spring-security。
Spring-security与Stark-security有多大差异,我该如何处理并解决问题?
Stark-security的静态授权= [...] 在整个系统中被大量使用,我只希望我不需要用完全不同的东西重新实现这些功能。
答案 0 :(得分:3)
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/
例如,以下是我如何将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