2012-12-18 168 views
2

我正在研究一個使用Grails的相當大的Web應用程序,我們正在嘗試實施角色安全性的使用。系統設置完成後,grails基本上授予對CAS認證用戶的完全角色訪問權限,但是當我爲每個控制器方法創建特定角色時,它完全忽略角色並繼續允許完全訪問經過身份驗證的用戶。interceptUrlMap被覆蓋?

這是我在Config.groovy中正在做:

grails.plugins.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap 
grails.plugins.springsecurity.interceptUrlMap = [ 
    "/controllerName/create":      [ "hasRole('ROLE_CREATE')" ], 
    "/controllerName/remove":      [ "hasRole('ROLE_DELETE')" ], 
    "/controllerName/listEntries":     [ "hasRole('ROLE_VIEW')" ], 
    "/controllerName/listAllEntries":    [ "hasRole('ROLE_VIEW')" ], 
    "/controllerName/getDefaultCategories":   [ "hasRole('ROLE_VIEW')" ] 
] 

的UrlConfig.goovy不具有controllerName的條目。

當應用程序調用controllerName中的create,remove或其他服務時,用戶是否具有指定的角色並不重要。它只是表現在那裏沒有映射。

是否有可能其他設置覆蓋interceptUrlMap?如果是這樣,我應該從哪裏開始看?

我要指出,我們必須使用Grails的1.3.8

更新:我試過了小寫的事情下文提到的,它仍然失敗。但是,如果我只是做了一個頂層(「/ controllername/**」)控制器入口(相對於在控制器中指定一個動作,它限制了訪問)。不幸的是,我們想要執行「/ controllername/create」類型的安全性。有什麼想法?

+0

「用戶是否具有指定的角色並不重要。它只是表現爲沒有映射那裏「 - 我很抱歉,但到底發生了什麼?你得到一個404或者你不能訪問頁面403錯誤? –

+0

該方法功能正常。沒有錯誤 –

回答

2

的URL必須小寫,應該有一個關於在啓動時警告。改變「controllerName」到「controllername」,「listAllEntries」到「listallentries」等

+0

Burt,是在Spring Security Core 1.2.7.3的Grails 2.0中,這是真的嗎?我在我的interceptUrlMap中有駱駝案例,並且我似乎沒有任何問題.. –

+0

根據這個頁面[http://grails-plugins.github。 COM/Grails的 - 彈簧 - 安全核/文檔/手動/導向/ single.html](http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/single.html ),它仍然是一個有效的要求Config.groovy。 我現在試試吧... –

+0

更新:我試過小寫的東西,它仍然失敗。但是,如果我只是做了頂級(「控制器名稱/ **「)控制器條目(與在控制器中指定動作相反,它限制了一個CCESS。不幸的是,我們想要執行「/ controllername/create」類型的安全性。有什麼想法嗎? –

0

它必須像這一點,這是我的例子:
請注意*意味着控制器內所有動作

grails.plugins.springsecurity.interceptUrlMap = [ 
    '/secure/create': ['ROLE_ADMIN'], 
    '/finance/***': ['ROLE_FINANCE', 'IS_AUTHENTICATED_FULLY'], 
    '/js/**':  ['IS_AUTHENTICATED_ANONYMOUSLY'], 
    '/css/**':  ['IS_AUTHENTICATED_ANONYMOUSLY'], 
    '/images/**': ['IS_AUTHENTICATED_ANONYMOUSLY'], 
    '/*':   ['IS_AUTHENTICATED_ANONYMOUSLY'], 
    '/login/**':  ['IS_AUTHENTICATED_ANONYMOUSLY'], 
    '/logout/**': ['IS_AUTHENTICATED_ANONYMOUSLY'] 
] 
+0

當你說「請注意, [星號]是指所有的動作「你的意思是鍵入三(3)個星號? (就像你在/ finance/***例子中展示的那樣)? – Patrick

+0

是的,這是正確的 – jimagic