Spring Security 3:@ PostFilter无法运行

时间:2011-01-17 17:25:51

标签: spring-security

您好 我是Spring Security 3的新手,并且正在尝试在接口中声明的方法上使用@PostFilter,但返回的Collection没有被过滤。

以下是代码:

public interface IProductService {

 @PostFilter("(!filterObject.customersOnly) or (filterObject.customersOnly and hasRole('ROLE_USER'))")
 Collection<Category> getCategories();
}

customerOnly是域对象类别中的布尔属性。

我在xyz-security.xml上添加了以下元素:

<global-method-security pre-post-annotations="enabled" />

有人可以帮我理解我错过了什么吗?

由于

1 个答案:

答案 0 :(得分:0)

典型的原因是:

  1. AspectJ和/或CGLIB JAR不在您的类路径中。
  2. 您在接口或类上有注释(查看Spring AOP docs以确定哪个AOP实现支持哪个。)
  3. 您已将Spring Security配置添加到与声明安全bean的位置不同的ApplicationContext(例如,当您通过声明Spring Security配置时,尝试在* -servlet.xml文件中保护bean) ContextLoaderListener)。
  4. 您已删除或更改了声明,以便配置Spring Security的同一ApplicationContext不处理带注释的bean。
  5. 如果这些建议都不适用,请启用DEBUG日志记录并观察应用程序启动以查看是否完全处理了bean注释。

    顺便说一下,我有很多读者报告过这个问题的类似风格 - 这个样本的源代码确实有效,但在所有情况下,读者已经改变了以上4个项目之一,导致示例代码为“break”;)