2010-10-04 1 views
3

Каков рекомендуемый подход к перехвату session.getAttribute() и session.setAttribute()? Это в приложении на основе Spring, поэтому что-то AOP-based было бы здорово. Я хотел бы избежать необходимости переопределять основные классы Tomcat, если это возможно.Перехват вызовов на HttpSession в Tomcat 6

Обновление: Я хочу сохранить фактические сериализованные атрибуты в веб-службе.

ответ

5

Я не знаком с АОП или весной (или Tomcat). :) Но я familliar с Java

Как я сделать это настроить фильтр, и замените переменную запроса со своим собственным объектом

request = new MyRequest(request); 

Затем переопределить getSession() и getSession (булево) в вернуть экземпляр MySession

javax.servlet.HttpServletRequest и javax.servlet.HttpSession классы являются стандартом Java EE, а не специфичным для Tomcat.

+0

Чертовски хорошая идея, поставить фасад вокруг самой просьбы ... –

+0

Это был мой первый ответ, который поднял рейтинг. Я смотрю, как он держит шею и шею с ответом Мэтта. –

+0

Похоже, этот подход более чист для моего случая использования, спасибо. –

5

Вы можете реализовать свой собственный сеанс org.apache.catalina.Manager и swap it into Tomcat's configuration, хотя интерфейс выглядит довольно длинным - возможно, сначала рассмотрите расширение ManagerBase или StandardManager.

В качестве альтернативы зарегистрируйте HttpSessionAttributeListener, чтобы получать уведомления, когда атрибут сеанса добавлен/удален/обновлен. Это не изменит механизм хранения по умолчанию - данные сеанса по-прежнему будут сохранены в памяти, но это также позволит вам сохранить данные с помощью альтернативного механизма.

+0

Первый подход, о котором вы говорили, это то, что я сделал первым, к сожалению, я не могу изменить конфигурацию ядра Tomcat в этом экземпляре. Подход AttributeListener выглядит интересным и не слишком инвазивным, я обязательно попробую. –

+0

@ Abdullah, вы можете настроить другой менеджер, отредактировав conf/server.xml. –

+0

Но разве файлы классов (или jar) не должны быть в TOMCAT_HOME/lib? Я не думаю, что у меня есть доступ к этой папке, есть ли способ обойти это? –