Может ли пользовательский вход в систему быть EJB Stateful?

StackOverflow https://stackoverflow.com/questions/9317145

Вопрос

Я использую jboss-as-7.1.0.Final-SNAPSHOT и попытка настроить пользовательский модуль входа в систему, использующий базу данных. Я следовал инструкциям в документации AS7, чтобы настроить новый домен безопасности в STANTALONE.XML, Decurity-Domain в jboss-security.xml и ограничении безопасности в web.xml, и я установил журнал Jboss, чтобы отслеживать, чтобы я мог видеть, что мой Пользовательские методы модуля входа в систему успешно вызываются (например, Login (), Authenticate ()).

Я не хочу использовать разграничение ручной транзакции в моем модуле входа в систему, поэтому было бы здорово, если бы мой модуль входа мог быть EA Stateful EJB.

Взглянуть на JBoss AS7: модель домена безопасности Статья, в которой говорится:

Просто напишите FQCN в атрибуте кода, и он должен работать из коробки.

Чтобы разместить пользовательские файлы класса модуля входа в систему, вы можете поместить их в банку и поместить:

Приложение классная группа вашего веб -архива (война) или ejb jar или архива предприятия (Ear) или отдельного модуля в каталоге модулей.

Похоже, небо - это предел того, где я могу разместить свой модуль входа в систему, в том числе в модуле EJB моего приложения. Означает ли это, что мой пользовательский модуль входа в систему может быть EJB с состоянием? Я не читал ничего, что говорит: «Нет». Однако, когда я развертываю свой модуль входа в систему в качестве состояния EJB, инъецированных управляемыми бобами и инъекционными EntityManager, по -видимому, не введены; Я получаю NullPointerException, когда пытаюсь вызвать на них методы.

Я посмотрел на org.jboss.security.auth.spi.databaseServerloginModule, который предоставляется в качестве одного из модулей входа в систему JBOSS по умолчанию. Я хотел посмотреть, как там обрабатывается доступ к базе данных. Поиск данных проходит через initialContext, например

InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(dsJndiName);
conn = ds.getConnection();

и все транзакции обрабатываются вручную. Я не хочу использовать этот подход, если это возможно.

Могу ли я использовать Stateful EJB? Или я далеко от базы в своем подходе к этому?

Это было полезно?

Решение

На вопрос был отвечен на Jboss Community следующим образом:

  • Пользовательский модуль входа в систему не может быть состоянием EJB, потому что «соответствующие жизненные циклы состояния EJB и модуля входа в систему совершенно разные» и «и« модули входа создаются и используются на протяжении всего шага аутентификации, а затем оставлены для сбора мусора. "

  • Пользовательский модуль входа в систему не может использовать CDI, поэтому нельзя вводить управляемый боб. Один человек сказал, что было бы довольно круто, если бы Jaas предоставил средства для введения управляемого боба, и что кому -то нужно предложить обновление спецификации JAAS. Чтобы разрешить это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top