2010-12-13 3 views
3

каждый раз, когда я вызываю subject.isPermitted(), он отправляет sql в db. Как я могу кэшировать его?Как использовать разрешения кэша в grails shiro

любой пример? спасибо


Я прочитал документ плагины siro grails. но can not solove это.

DataSource:

hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = true 
    cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider' 
} 

тогда как установить cachemanager сиро? Я пытаюсь загрузить spring.resource, выдаю ошибку.

и что такое экземпляр bean name cachemanager? мне нужно настроить еще?

ответ

1

Вам необходимо настроить экземпляр org.apache.shiro.cache.CacheManager на SecurityManager Shiro. Большинство реалистичных реализаций Real Shiro прекрасно знают, как работать с сконфигурированным CacheManager, и автоматически кэширует AuthorizationInfo, возвращенную из поиска разрешений Realm.

Я не знаю, как это сделать с помощью плагина Grails Shiro, но в INI Широ, вы могли бы сделать, что таким образом:

[main] 
... 
cacheManager = com.my.implementation.of.CacheManager 
securityManager.cacheManager = $cacheManager 
... 

Я рекомендовал бы просить список Grails пользователей для рассылки посмотрите, есть ли более «грациозный» способ настроить это для плагина Grails Shiro.

НТН,

Les

+0

спасибо за ответ. – atian25

+0

@Les - Мне нужно делать то же самое, я хочу использовать встроенную поддержку кеширования, которая поставляется с grails, но я думаю, что это невозможно с использованием плагина grails-shriro. Графический плагин Grails не распространяется ни на одну из встроенных областей (например, AuthorizingRealm), а на реализацию Realm inteface. Поэтому для того, чтобы делать кеширование, мы должны делать это вручную в самой области и не можем зависеть от того, насколько он кэширует информацию аутентификации для нас –