2014-01-17 2 views
4

Я пытаюсь заменить управление сеансом (в настоящее время управляется Каталиной/Tomcat) моего webapp для управления собственными сеансами.Shiro HttpSession в SessionListener?

Это должно быть довольно простая работа, как прорекламировали на сайте Сиро:

Прозрачная поддержка HttpSession - Если вы используете собственные сессий Широ, мы реализовали API сеанса HTTP и Servlet 2.5 API , так что вам не нужно менять какой-либо существующий код для использования Shiro.

Итак, вы заменили местного диспетчера сеансов на Shiro's DefaultWebSessionManager, все должно работать из коробки.

Это также касается моего webapp, за исключением определенного javax.servlet.http.HttpSessionListener. Этот прослушиватель больше не принимает события, поскольку использует управление сеансами Shiro.

Не беспокойтесь, я думал! Shiro предлагает собственный интерфейс org.apache.shiro.session.SessionListener, который можно связать с диспетчером сеансов.

Однако этот интерфейс сильно отличается от javax.servlet.http.HttpSessionListener. Прошло не более HttpSession объектов, а Сиро слушатель передает свои собственные org.apache.shiro.session.Session объекты с событиями.

Мои существующие работы по осуществлению только с HttpSession объектов. Я обнаружил, что Shiro Session может быть преобразован в HttpSession:

// HttpServletRequest currentRequest; 
// ServletContext servletContext; 
// Session session; 
HttpSession httpSession = new ShiroHttpSession(session, currentRequest, servletContext); 

Однако нет никакого способа Acces HttpServletRequest и ServletContext от Shiro SessionListener.

Любые идеи, как решить эту проблему, например. можете ли вы ответить на один из этих двух вопросов?

  1. Почему старый javax.servlet.http.HttpSessionListener уже не называется?
  2. Как преобразовать Shiro Session объектов в HttpSession объектов в силе SessionListener?

ответ

3

Почему старый javax.servlet.http.HttpSessionListener больше не называется?

Как вы объяснили, управление сеансом теперь обрабатывается через Сиро, а не через контейнер Servlet. Таким образом, даже если ваш HttpSessionListener зарегистрирован, ваш контейнер Servlet просто не создает никаких объектов HttpSession и, следовательно, не использует никаких обратных вызовов HttpSessionListener.

Как превратить Shiro Session объекты HttpSession объектов в Shiro SessionListener?

У вас нет, и вы не должны.

Если вы объясните, что вы хотите делать с HttpSession, мы сможем найти альтернативы.

+0

Simpy put, весь код в моем старом SessionListener написан для работы с HttpSessions. Как я могу повторно использовать этот код без необходимости реорганизовывать все это для использования объектов Shiro Session? Это будет довольно много работы. –

+0

@KarstenDaemen Какие методы HttpSession вы используете? У «сеанса» Сиро есть атрибуты и геттеры, но, очевидно, они недоступны для JSP и т. Д. –

Смежные вопросы