我已按照此链接使用 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
注入每个服务类并将此代码添加到每个方法中确实很尴尬。我怎样才能以更清洁的方式做到这一点?