2014-01-30 5 views
3

У меня есть вопрос о Spring Security и Spring Caching. Скажем, у меня есть метод, и я аннотированный метод с @PreAuthorize ("состояние") и @Cacheable (...), как этотВесна: @PreAuthorize имеет преимущество над @Cacheable?

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

Does @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 будет оцениваться, даже если результат функции calculate() уже был рассчитан и кэширован? Пожалуйста, имейте в виду, что эта функция может быть вызвана, скажем, пользователем A, затем значением, хранящимся в кеше, а затем другой пользователь (пользователь B) выполняет действие, требующее повторной вызова этой функции? Будет ли оцениваться условие @PreAuthorize или нет?

Из-за того, что я могу найти в Documenation Spring, как @PreAuthorize, так и @Cacheable имеют порядок их рекомендаций, определенных как «Ordered.LOWEST_PRECEDENCE», что, я считаю, означает, что порядок, в котором они оцениваются, не определен ?

Спасибо!

ответ

4

Оба <security:global-method-security> и <cache:annotation-driven> теги, которые позволяют @PreAuthorize и @Cacheable аннотаций, имеют order атрибут, который определяет приоритет выполнения их АОП советы.

Если вы хотите, чтобы проверка безопасности всегда выполнялась до проверки кеша «на пути в», вы должны дать ему более высокий приоритет, установив для атрибута order более низкое значение.

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

Спасибо. Но разве это не то, что следует упомянуть в весенней документации по кешированию? Я думаю, что игнорирование других аннотаций по методу довольно серьезно. Во всяком случае, я уже установил атрибут заказа как для кеша, так и для метода global-method-security, мне просто интересно, возможно ли, что проверки @PreAuthorize были выполнены каким-то другим способом, который гарантирует их оценку. – 0x42