2013-04-13 70 views
1

我跟着this鏈接來實現與Grails,Vaadin 7和Spring Security的應用程序安全性。身份驗證部分起作用,但看起來授權不起作用。 我創建這麼簡單服務:Grails,Vaadin 7和SpringSecurity:授權不起作用

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插件才能工作。