4

我有一个关于 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 Documenation 中可以找到的内容来看,@PreAuthorize 和 @Cacheable 的建议顺序都定义为“Ordered.LOWEST_PRECEDENCE”,我相信这意味着评估它们的顺序是未定义的?

谢谢!

4

1 回答 1

5

启用and注释的<security:global-method-security>and<cache:annotation-driven>标记都有一个属性,该属性确定其 AOP 建议的执行优先级。@PreAuthorize@Cacheableorder

如果你想确保安全检查总是在缓存检查“在路上”之前发生,那么你应该通过将order属性设置为较低的值来赋予它更高的优先级。

<security:global-method-security order="1">
于 2014-01-31T10:35:53.110 回答