2014-04-03 544 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

相关问题