2012-02-16 3 views
3

Я использую jboss-as-7.1.0.Final-SNAPSHOT и пытаюсь настроить пользовательский модуль входа, который использует базу данных. Я выполнил инструкции в документации AS7, чтобы настроить новый домен безопасности в файле standalone.xml, security-domain в jboss-security.xml и ограничении безопасности в web.xml, и я установил ведение журнала JBoss в TRACE, чтобы я мог видеть, что мой успешно применяются методы пользовательского метода входа (например, login(), authenticate()).Может ли пользовательский LoginModule быть автономным ejb?

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

Взглянув на JBoss AS7 : Security Domain Model статью, в которой говорится:

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

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

приложение путь к классам вашего веб-архива (войны) или EJB банка или архива предприятия (EAR) ИЛИ отдельный модуль в каталоге модулей.

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

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

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

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

Могу ли я использовать stateful ejb? Или я нахожусь в стороне от своего подхода к этому?

ответ

3

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

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

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

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