Может ли пользовательский LoginModule быть ejb с отслеживанием состояния? - PullRequest
3 голосов
/ 16 февраля 2012

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

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

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

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

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

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

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

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

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

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

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

1 Ответ

3 голосов
/ 17 февраля 2012

На вопрос JBoss Community был дан ответ:

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

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

...