4

我有一个控制器方法,我像这样注释:

@Secured(['ROLE_ADMIN'])
def save() {
    ... // code ommitted
}

我正在尝试编写一个单元测试来验证只有管理员用户可以点击 URL:

def "Only the admin user should be able to invoke save"() {
    given:
    def user = createNonAdminUser() // let's pretend this method exists
    controller.springSecurityService = Mock(SpringSecurityService)
    controller.springSecurityService.currentUser >> user

    when:
    controller.save()

    then:
    view ==~ 'accessdenied'
}

但是,返回的视图是save视图而不是拒绝访问视图。看起来它@Secured完全绕过了注释。有没有办法@Secured从单元测试或集成测试中测试注释?

4

2 回答 2

2

尝试这个:

SpringSecurityUtils.doWithAuth('superuser') {
    controller.save()
}

http://greybeardedgeek.net/2011/05/13/testing-grails-controllers-with-spock/

于 2013-05-31T04:38:46.533 回答
0

如果您还没有在createNonAdminUser().

SpringSecurityUtils.reauthenticate username, password

可能与这个问题有关。

于 2013-05-31T04:48:41.533 回答