2013-08-08 3 views
0

Я хочу реализовать аудит в своем веб-проекте. В основном мое приложение составлено веб-проектом (WAR), который вызывает методы в проекте EJB (JAR), все обернуто внутри EAR, который развернут в контейнере (Jboss и, вероятно, Websphere в ближайшем будущем).Проверка JPA с идентификатором пользователя

Итак, я получил сеанс пользователя на веб-стороне и сущности и DAO на стороне ejb. Я хотел бы реализовать процедуру аудита для некоторых пользовательских транзакций, поэтому состояние данных должно сохраняться в базе данных вместе с идентификатором пользователя, выполнившего изменение.

Я могу легко передать идентификатор пользователя при каждом вызове на стороне EJB и выполнить аудит из бизнес-методов, но это загромождает мои бизнес-и клиентские методы.

Я изучил Hibernate Envers, что представляет собой очень интересную структуру аудита, но не проверяет идентификатор пользователя из коробки. Поэтому я посмотрел дальше и узнал this post, в котором объясняется, как использовать RevisionListener, чтобы получить идентификатор пользователя из сеанса и сохранить его в базе данных. Однако он не работает в архитектуре EAR по следующей причине: этот RevisionListener использует FacesContext.getCurrentInstance(), чтобы получить идентификатор пользователя из сеанса, поэтому это означает, что RevisionListener должен находиться на веб-стороне приложение, а не на стороне EJB ...

Ну, я надеюсь, что я сделал себе достаточно ясно :)

Ура!

+0

Какой тип EJB вы используете: Session beans и/или JPA javax.persistence.Entity beans? – Beryllium

+0

Мои EJB - все @Stateless, а мои сущности - javax.persistence. @ Entity –

ответ

1

Если у вас уже есть апатриды сессионных компоненты, которые содержат бизнес-логику, имя идентифицированного пользователяуже пройдено в ваши EJBs

Вы можете использовать sessionContext.getCallerPrincipal(), чтобы получить имя вызывающего абонента.

Требования

  • Веб-приложение использует login-config (определенный в web.xml)
  • Веб-приложение JBoss использует security-domain (jboss.xml); другие серверы приложений должны иметь аналогичный шаблон для реализации входа/аутентификации
+0

Хм ... Я не уверен, что смогу пойти так. Мое приложение может быть развернуто в другом контейнере, особенно в Websphere, поэтому я не могу полагаться на специфическую конфигурацию Jboss. Извините, я упомянул Jboss по моему вопросу, я собираюсь удалить эту ссылку. –

+0

В настоящее время я сохраняю зарегистрированную информацию о пользователе только в сеансе JSF/Servlet. –

+1

Домен безопасности - это конкретная реализация JBoss, это бэкэнд для конфигурации login-config. Образец конфигурации входа в систему также доступен в других контейнерах. Если у вас есть только пользовательская информация только на веб-уровне, то она должна быть передана в EJB - явно аргументом или неявным образом с использованием принципала. Параметр WebSphere модуля входа в систему JBoss * - это * пользовательский реестр пользователей * - просто другое имя, тот же шаблон. – Beryllium

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