Apache shiro — как узнать, что кеширование работает для авторизации?

Я использую Apache Shiro в своем Tomcat и хочу включить кеширование авторизации через EhCache.

Что я сделал, так это добавил эти две строки в shiro.ini:

cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
securityManager.cacheManager = $cacheManager

и скопировал ehcache-core-2.5.1.jar в мой каталог WEB-INF/lib. Для авторизации я реализовал пользовательскую область, которая считывает разрешения из базы данных MySQL. Поэтому я хочу включить кеширование, чтобы максимально сократить запросы к базе данных... Должен отметить, что я не знаком с EhCache и хочу только включить кеширование авторизации!

Если я правильно понял документацию Широ, вышеизложенного достаточно, чтобы включить кеширование, однако я этого не вижу :(

Tomcat запускается без исключений, и в тестовом JSP, который я использую, авторизация сначала работает нормально. После того, как я внесу изменения в разрешения базы данных, я увижу, что тестовый JSP сразу узнает об изменении! Я ожидал, что тестовый JSP вернет значения из кеша... Можете ли вы сказать мне, что может быть не так? Кроме того, есть ли способ узнать, вызывается ли EhCache на самом деле и как он себя ведет (если необходимо включить ведение журнала, я был бы признателен, если бы вы предоставили мне подробную информацию, потому что я не очень знаком с этим).

Обновление: я также должен упомянуть, что добавил строку

System.out.println("Caching is enabled " + isCachingEnabled() );

при инициализации моей пользовательской области, и я получаю true!

ТИА,

Серафим


person Serafeim    schedule 20.02.2012    source источник


Ответы (3)


Лично я не знаю Широ и не очень хорошо знаю Tomcat, но у меня есть хорошее понимание EHCache. Я знаю, что API поддерживает обновления кеша. В зависимости от того, как Широ использует EHCache, он может обновлять кэшированную информацию при ее изменении. Ваш JSP, показывающий, что он обновлен, не доказывает, что кеш работает или не работает.

В программировании довольно легко вставить код для сбора статистики для EHCache, но я не уверен, как бы вы поступили, если бы он был интегрирован таким образом. В EHCache встроено ведение журнала, когда вложенные приложения настроены на высокий уровень ведения журнала, но у меня возникли проблемы с его работой в версии 2.5.1. Параметры ведения журнала для EHCache описаны здесь: http://ehcache.org/documentation/operations/logging. , но я не знаю, как бы вы заставили Широ выводить сообщения.

Надеюсь, это поможет.

person Arcon Wan    schedule 25.04.2012

Используйте jconsole для просмотра статистики JMX EHCache.

  1. Запустить jconsole
  2. Откройте вкладку MBeans
  3. С левой стороны откройте дерево «net.sf.ehcache».
  4. Перейдите к net.sf.ehcache/CacheStatistics/[ваше имя кеша, по умолчанию net.sf.ehcache.CacheManager@some_id]
  5. Найдите свой тайник по названию, откройте дерево и выберите "Атрибуты"

Теперь вы можете посмотреть атрибуты вашего кеша. Поэкспериментируйте со своим приложением и посмотрите, изменяются ли переменные «CacheHits» и «ObjectCount» должным образом. ObjectCount — это все элементы, кэшированные ehcache в любой момент времени; CacheHits показывает, используются ли эти элементы на самом деле.

Вы также можете сделать это удаленно, но это будет немного сложно — вам нужно будет туннелировать JConsole через прокси-сервер SOCKS. В этой статье подробно описано, как это сделать: http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html.

person Janne Jalkanen    schedule 26.10.2012

Если у вас есть пошаговый отладчик, попробуйте поставить точку останова в subject.login(), т.е.:

Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
subject.login(token);

Это должно пройти через: org.apache.shiro.authc.pam.ModularRealmAuthenticator.java org.apache.shiro.realm.AuthenticatingRealm.java

Вы увидите попытки доступа к кешу в AuthenticationRealm.java.

Удачи!

person nettie    schedule 09.05.2019