Apache shiro - откуда мне знать, что кеширование работает для авторизации? - PullRequest
2 голосов
/ 20 февраля 2012

Я использую 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 и хочу только включить кэширование авторизации!

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

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

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

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

при инициализации моего пользовательского царства, и я становлюсь правдой!

TIA,

Serafeim

Ответы [ 3 ]

1 голос
/ 26 октября 2012

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

  1. Запустите jconsole
  2. Откройте вкладку MBeans
  3. С левой стороны откройте "net".sf.ehcache "tree.
  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.

1 голос
/ 25 апреля 2012

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

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

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

0 голосов
/ 09 мая 2019

Если у вас есть пошаговый отладчик, попробуйте поставить точку останова в 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

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

Удачи!

...