有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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其显示访问被拒绝为什么?是因为denyAllpermitAll有更多的优先权吗

如果是或不是,我如何解决这个问题?我确信有很多人不得不像这样保护他们的应用程序

我们这样做的主要原因是,如果某个新人来编写一个新的DWR类,默认情况下应该拒绝该权限,以便他们可以显式地为新类设置访问角色


共 (1) 个答案

  1. # 1 楼答案

    intercept-url模式按列出的顺序匹配。 一旦找到匹配项,其余指定的模式将被忽略

    这就是为什么您应该在前面列出更具体的模式

    在您的情况下,具体的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

    但是我不明白原因

    The main reason why we are doing this is if some new person comes and write a new DWR class, by default the permission should be denied, so that they can explicitly set an access role for the new class

    创建角色以限制开发人员?通常,角色是指应用程序提供的用户和功能