我们有一个使用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 优先于 permitAll?。
如果是,我该如何解决这个问题?我相信有很多人必须像这样保护他们的应用程序。
我们这样做的主要原因是,如果有新人来写一个新的DWR类,默认情况下应该拒绝该权限,以便他们可以为新类明确设置访问角色。
答案 0 :(得分:3)
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"/>
但是我不明白原因
我们这样做的主要原因是,如果有新人来写一个新的DWR类,默认情况下应该拒绝该权限,以便他们可以为新类明确设置访问角色
创建角色以限制开发人员?通常,角色是指用户提供的用户和功能。