Grails、Vaadin 7 和 SpringSecurity:授权不起作用
Posted
技术标签:
【中文标题】Grails、Vaadin 7 和 SpringSecurity:授权不起作用【英文标题】:Grails, Vaadin 7 and SpringSecurity: authorization not working 【发布时间】:2013-04-06 04:50:42 【问题描述】:我已关注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
注入到每个服务类中并将此代码添加到每个方法中确实很尴尬。我怎样才能以更清洁的方式做到这一点?
【问题讨论】:
【参考方案1】:事实证明,控制器必须像 @Secured("hasRole('ROLE_ADMIN')")
一样,其余的都需要 ACL 插件才能工作。
【讨论】:
以上是关于Grails、Vaadin 7 和 SpringSecurity:授权不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Liferay 7 和 Vaadin 8:Vaadin Shared 未激活
为啥在 Vaadin 7 中使用 CustomComponent 进行布局?