我使用的是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()")
以上方法,但没有一种方法有效。
答案 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条目,在这种情况下,顺序很重要。