如何在Spring中覆盖安全访问?

时间:2014-04-19 13:09:11

标签: spring security spring-mvc spring-security

我使用的是Spring Framework 4.0.0 GA和Spring Security 3.2.0 GA。我已经使用点切割表达式将安全性应用于包中所有类的所有方法,如下所示。

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" proxy-target-class="false">
    <protect-pointcut expression="execution(* admin.dao.*.*(..))" access="ROLE_ADMIN"/>
</global-method-security>

admin.dao中定义的所有类的所有方法只能由权限为ROLE_ADMIN的用户访问。

现在是否可以在此包中的某些类的某些方法中覆盖此安全约束?

我需要匿名访问此软件包下某些类中的某些方法(已经受到保护)。

在JAAS中,这可以通过使用相关方法上方的javax.annotation.security.PermitAll注释来实现,该注释将覆盖任何全局约束(例如,应用类级别的约束)。

我尝试使用@Secured(value = "permitAll")@Secured(value = "isAnonymous()")以上方法,但没有一种方法有效。

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" proxy-target-class="false">
    <protect-pointcut expression="execution(* admin.your.permit.all.dao.*.*(..))" 
          access="permitAll"/>
    <protect-pointcut expression="execution(* admin.dao.*.*(..))" access="ROLE_ADMIN"/>
</global-method-security>

确保首先放置protect-pointcut permitAll条目,在这种情况下,顺序很重要。