2014-01-30 155 views
3

我有一个关于春季安全和Spring缓存问题。说我有一个方法,我已经标注了@PreAuthorize( “条件”),并@Cacheable(...)的方法,这样Spring:@PreAuthorize优先于@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)采取precendence超过@Cacheable(http://docs.spring.io/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html )?该框架是否保证了@PreAuthorize安全检查将被评估,即使计算的结果()函数已经计算和缓存?请问,记住,这个功能可以通过,比如调用,用户A,则该值存储在缓存中,然后其他用户(用户B)也再次调用需要此功能的作用?是否评估@PreAuthorize条件?

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

谢谢!

回答

4

无论是<security:global-method-security><cache:annotation-driven>标记,使@PreAuthorize@Cacheable注解,有一个order属性决定人们的AOP通知的执行优先级。

如果要确保安全检查始终在缓存检查“正在进行之前”之前发生,那么应该通过将order属性设置为更低的值来使其具有更高的优先级。

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

感谢。但是这不是在缓存的Spring文档中应该提及的东西吗?我认为忽略一种方法上的其他注释是非常严重的。无论如何,我已经设置了两个高速缓存和全球方法的安全性,如果也许@PreAuthorize已经检查过了,保证他们将评估一些其他的方式执行我只是想知道的顺序属性。 – 0x42