我对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”,我相信这意味着它们的评估顺序是不确定的?
谢谢!
答案 0 :(得分:4)
启用<security:global-method-security>
和<cache:annotation-driven>
注释的@PreAuthorize
和@Cacheable
标记都具有order
属性,用于确定其AOP建议的执行优先级
如果您想确保在“在途中”缓存检查之前始终进行安全检查,那么您应该通过将order
属性设置为较低的值来赋予它更高的优先级。
<security:global-method-security order="1">