1

我已按照链接使用 Grails、Vaadin 7 和 Spring Security 实现应用程序安全性。身份验证部分有效,但看起来授权无效。我创建了一个如此简单的服务:

import grails.plugins.springsecurity.Secured
class WelcomeService {
    @Secured(['ROLE_ADMIN'])
    def sayHello() {
        return "Hello, ADMIN!"
    }
}

和一个用户"ROLE_USER",但每次我打电话

Notification.show(Grails.get(WelcomeService).sayHello())显示消息,但AccessDeniedException应该抛出 an 。

你有什么想法为什么会发生这种情况?


UPD:到目前为止,我能想到的唯一解决方案是像这样更改服务代码:

def sayHello = {
    if (!springSecurityService.getPrincipal().getAuthorities().contains(new GrantedAuthorityImpl("ROLE_ADMIN"))){
        throw new AccessDeniedException("You are not authorized to do this!")
    }
    return "Hello, ADMIN!"
}

但是将aspringSecurityService注入每个服务类并将此代码添加到每个方法中确实很尴尬。我怎样才能以更清洁的方式做到这一点?

4

1 回答 1

1

事实证明,它必须像@Secured("hasRole('ROLE_ADMIN')")控制器一样,其余的都需要 ACL 插件才能工作。

于 2013-04-15T05:54:27.570 回答