我已按照this链接实现了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
。
你有什么想法可能会发生这种情况吗?
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!"
}
但是在每个服务类中注入一个springSecurityService
并将此代码添加到每个方法中真的很尴尬。我怎样才能更清洁?
答案 0 :(得分:1)
原来它必须像控制器@Secured("hasRole('ROLE_ADMIN')")
一样,所有其他人都需要一个ACL插件才能工作。