我们得到了一个使用Spring security 3.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.aCommonMethod.dwr的调用,它的显示访问就会被拒绝。为什么?是因为denyAll的优先级高于allowAll吗?
如果是,该如何解决?我确信有很多人必须像这样保护他们的应用程序。
我们这样做的主要原因是,如果有新人来写新的DWR类,则默认情况下应拒绝该权限,以便他们可以为新类显式设置访问角色。
最佳答案
intercept-url
模式按列出的顺序匹配。
找到匹配项后,其余指定的模式将被忽略。
这就是为什么您应该更早列出更具体的模式的原因。
根据您的情况,特定的网址格式会在以后出现。因此,denyAll
首先找到并选择了那个。
尊敬的顺序像
<!-- 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类,则默认情况下应拒绝该权限,以便他们可以为新类显式设置访问角色
创建角色来限制开发人员?通常,角色是针对应用程序提供的用户和功能的。
关于java - 一起使用denyAll()和permitAll()Spring Security 3.0.8无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22840681/