2014-01-30 61 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