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:授权不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 vaadin on grails 应用程序中启用脚手架

Liferay 7 和 Vaadin 8:Vaadin Shared 未激活

为啥在 Vaadin 7 中使用 CustomComponent 进行布局?

Vaadin 7:UI 与 Navigator+Views 的使用

我需要7个websockets

如何在 Vaadin 7 中制作一对单选按钮来表示 True/False 值但本地化文本?