2014-04-03 547 views
0

我們得到了一個使用Spring安全性3.0.8保護的Web應用程序。我們對ajax使用DWR,相當多。現在,我們要拒絕訪問所有DWR調用,除非明確指定:一起使用denyAll()和permitAll()Spring安全3.0.8不起作用

這是我做的,但不工作:

<!-- Deny every url which is dwr call --> 
<intercept-url pattern="/js/dwr/**/**DWR**" access="denyAll"/> 

<!-- give access to SomeDWRClass for ROLE_A --> 
<intercept-url pattern="/js/dwr/**/SomeDWRClass**" access="hasAnyRole('ROLE_A')"/> 

<!-- Give access to everybody for CommonDwr.aCommonMethod.dwr --> 
<intercept-url pattern="/js/dwr/CommonDwr.aCommonMethod.dwr" access="permitAll"/> 

的問題是,每當有到CommonDwr.aCommonMethod通話.dwr其顯示訪問被拒絕。爲什麼?是因爲denyAll有更多的優先權嗎?

如果是的話,我該如何解決這個問題?我確信有很多人必須像這樣保護他們的應用程序。

我們這樣做的主要原因是,如果有新來的人來寫一個新的DWR類,默認情況下該權限應該被拒絕,以便他們可以明確地爲新類設置一個訪問角色。

回答

3

intercept-url模式按列出的順序進行匹配。 一旦找到匹配項,指定的其餘模式將被忽略。

這就是您之前應該列出更多特定模式的原因。

在你的情況下,具體的網址格式會在稍後顯示。所以denyAll首先找到並挑選那一個。

Reverese像

<!-- Give access to everybody for CommonDwr.aCommonMethod.dwr --> 
<intercept-url pattern="/js/dwr/CommonDwr.aCommonMethod.dwr" access="permitAll"/> 

<!-- give access to SomeDWRClass for ROLE_A --> 
<intercept-url pattern="/js/dwr/**/SomeDWRClass**" access="hasAnyRole('ROLE_A')"/> 

<!-- Deny every url which is dwr call --> 
<intercept-url pattern="/js/dwr/**/**DWR**" access="denyAll"/> 

順序見Core Security Filters

但是我不明白其中的道理

爲什麼我們正在做的是,如果一些新的人來寫一個主要的原因新的DWR類,默認情況下應該拒絕權限,以便他們可以明確設置新類的訪問角色

創建角色以限制開發人員?通常,角色是指應用程序提供的用戶和功能。

+0

謝謝。 「創建角色來限制開發人員」 - 實際上沒有。我們只是遵循安全政策 - 「默認拒絕」 – avijendr

相關問題