В предыдущей заметке мы рассмотрели процесс настройки сервера GlassFish 3 для выполнения аутентификации пользователей в web-приложении. Настало время сделать то же самое в JBoss AS 7.
Сразу договоримся, что будем использовать JBoss как standalone-сервер, следовательно все необходимые настройки будем выполнять, редактируя файл $JBOSS_HOME/standalone/configuration/standalone.xml.
Итак, для начала настроим соединение с базой данных (традиционно на примере PostgreSQL). Для этого в файле standalone.xml перейдём к разделу profile. Найдём в этом разделе подсистему c атрибутом пространства имён urn:jboss:domain:datasources:1.0 и добавим новый источник даных, а также зарегистрируем драйвер базы данных:
Итак, для начала настроим соединение с базой данных (традиционно на примере PostgreSQL). Для этого в файле standalone.xml перейдём к разделу profile. Найдём в этом разделе подсистему c атрибутом пространства имён urn:jboss:domain:datasources:1.0 и добавим новый источник даных, а также зарегистрируем драйвер базы данных:
<subsystem xmlns="urn:jboss:domain:datasources:1.0"> <datasources> <datasource jndi-name="java:/jdbc/AuthDemoDS" pool-name="AuthDemoPool" enabled="true" use-java-context="true"> <connection-url>jdbc:postgresql://localhost:5432/authdemo</connection-url> <driver>postgresql</driver> <security> <user-name>postgres</user-name> <password>changeit</password> </security> </datasource> <drivers> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem>
В атрибуте module описания драйвера базы данных мы ссылаемся на несуществующий пока еще модуль org.postgresql. Для добавления модуля перейдите в каталог $JBOSS_HOME/modules/org и создайте подкаталоги postgresql/main. В каталог main поместите драйвер базы данных PostgreSQL и там же создайте файл module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="org.postgresql"> <resources> <resource-root path="postgresql-9.1-901-1.jdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> <module name="javax.servlet.api" optional="true"/> </dependencies> </module>
Следующий шаг - определение домена безопасности, в котором мы укажем желаемый модуль аутентификации. Вернитесь к разделу profile файла standalone.xml и найдите в этом разделе подсистему с пространством имён urn:jboss:domain:security:1.1. В указанной подсистеме создайте новый домен безопасности:
<subsystem xmlns="urn:jboss:domain:security:1.1"> <security-domains> <security-domain name="auth-demo" cache-type="default"> <authentication> <login-module code="Database" flag="required"> <module-option name="dsJndiName" value="java:/jdbc/AuthDemoDS"/> <module-option name="principalsQuery" value="SELECT password FROM users WHERE username = ?"/> <module-option name="rolesQuery" value="SELECT role_name, role_group FROM roles WHERE username = ?"/> </login-module> </authentication> </security-domain> </security-domains> </subsystem>
В атрибуте code элемента login-module мы указали псевдоним модуля аутентификации
org.jboss.security.auth.spi.DatabaseServerLoginModule
Псевдонимы модулей жёстко зашиты в классе
org.jboss.as.security.ModulesMap
Среди них можно подобрать подходящий вам модуль. Если же ни один из них вас не устроит, разумеется можно воспользоваться самодельным, унаследовав класс от базового
org.jboss.security.auth.spi.AbstractServerLoginModule
или от одного из его потомков. Результат необходимо оформить в виде модуля сервера по аналогии с тем, как мы сделали это для драйвера базы данных. Не забудьте указать в module.xml необходимые вам зависимости от других модулей (как минимум, будет присутствовать зависимость от org.picketbox). После этого описание модуля аутентификации в standalone.xml слегка изменится:
... <login-module code="org.demo.MyLoginModule" module="org.demo" flag="required"> ....
Используемый нами в данном случае модуль аутентификации
org.jboss.security.auth.spi.DatabaseServerLoginModule
принимает довольно много параметров. Мы задали самый минимум, указав JNDI-имя созданного нами ранее источника данных и SQL-запросы на выборку паролей и ролей с их группами по имени пользователя.
Единственное, что нам осталось сделать - это создать в нашем web-приложении рядом с web.xml дополнительный дескриптор jboss-web.xml, сославшись в нём на определенный нами домен безопасности:
Единственное, что нам осталось сделать - это создать в нашем web-приложении рядом с web.xml дополнительный дескриптор jboss-web.xml, сославшись в нём на определенный нами домен безопасности:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> <jboss-web> <security-domain>auth-demo</security-domain> </jboss-web>
Заключительным шагом в нашей прогулке по настройкам аутентификации на серверах приложений станет заметка о TomEE.
Комментариев нет:
Отправить комментарий