java同时使用denyAll()和permitAll()的Spring security 3.0.8不起作用
我们得到了一个使用SpringSecurity3.0.8保护的Web应用程序。我们经常将DWR用于ajax。现在,我们要拒绝访问所有DWR调用,除非明确指定:
这是我做的,但不起作用:
<!-- 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时。普通方法。dwr其显示访问被拒绝为什么?是因为denyAll比permitAll有更多的优先权吗
如果是或不是,我如何解决这个问题?我确信有很多人不得不像这样保护他们的应用程序
我们这样做的主要原因是,如果某个新人来编写一个新的DWR类,默认情况下应该拒绝该权限,以便他们可以显式地为新类设置访问角色
# 1 楼答案
intercept-url
模式按列出的顺序匹配。 一旦找到匹配项,其余指定的模式将被忽略这就是为什么您应该在前面列出更具体的模式
在您的情况下,具体的url模式会在后面出现。所以
denyAll
首先找到并选择了那个尊重秩序
见Core Security Filters
但是我不明白原因
创建角色以限制开发人员?通常,角色是指应用程序提供的用户和功能