Spring:@PreAuthorize优先于@Cacheable吗?

时间:2014-01-30 16:37:44

标签: spring spring-mvc spring-security spring-cache

我对Spring Security和Spring Caching有疑问。假设我有一个方法,我用@PreAuthorize(“condition”)和@Cacheable(...)注释了这个方法,就像这样

@PreAuthorize("some authorization check")
@Cacheable(....)
public String calculate() {
  ....
}

@PreAuthorize(http://docs.spring.io/spring-security/site/docs/3.0.x/reference/ns-config.html)是否优先于@Cacheable(http://docs.spring.io/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html)?框架是否保证将评估@PreAuthorize安全检查,即使已经计算并缓存了calculate()函数的结果?请记住,用户A可以调用此函数,然后存储在缓存中的值,然后另一个用户(用户B)执行需要再次调用此函数的操作?是否会评估@PreAuthorize条件?

从我在Spring文档中找到的内容来看,@ PreAuthorize和@Cacheable都将其建议的顺序定义为“Ordered.LOWEST_PRECEDENCE”,我相信这意味着它们的评估顺序是不确定的?

谢谢!

1 个答案:

答案 0 :(得分:4)

启用<security:global-method-security><cache:annotation-driven>注释的@PreAuthorize@Cacheable标记都具有order属性,用于确定其AOP建议的执行优先级

如果您想确保在“在途中”缓存检查之前始终进行安全检查,那么您应该通过将order属性设置为较低的值来赋予它更高的优先级。

<security:global-method-security order="1">