суббота, 23 марта 2013 г.

Настройка аутентификации на основе JAAS в TomEE

Третья и заключительная заметка, в которой мы коснёмся ещё одного достаточно популярного сервера приложений - Apache TomEE (для целей заметки использовалась версия 1.5.1 Plus). На всякий случай вот ссылки на первые две заметки: эта о GlassFish 3, а эта о JBoss AS 7.

Как обычно, начнём с настройки соединения с базой данных PostgreSQL. Откройте файл $TOMEE_HOME/conf/tomee.xml и добавьте ещё один ресурс:
<Resource id="jdbc/AuthDemoDS" type="DataSource">
    JdbcDriver org.postgresql.Driver
    JdbcUrl jdbc:postgresql://localhost:5432/authdemo
    UserName postgres
    Password changeit
    JtaManaged true
</Resource>
Драйвер базы данных положите в каталог $TOMEE_HOME/lib.

Переходим непосредственно к настройке аутентификации. Откройте файл $TOMEE_HOME/conf/server.xml и найдите в этом файле realm с именем класса
org.apache.catalina.realm.LockOutRealm
Внутри него мы определим наш собственный realm:
<Realm className="org.apache.catalina.realm.JAASRealm"
    appName="AuthDemoApp"
    userClassNames="org.apache.openejb.core.security.jaas.UserPrincipal"
    roleClassNames="org.apache.openejb.core.security.jaas.GroupPrincipal">
</Realm>
В атрибуте appName мы сослались на несуществующий пока сценарий аутентификации "AuthDemoApp". Опишем этот сценарий в файле login.config. Создайте его в каталоге $TOMEE_HOME/conf. Содержимое файла login.config:
AuthDemoApp {
    org.apache.openejb.core.security.jaas.SQLLoginModule required
    dataSourceName="jdbc/AuthDemoDS"
    userSelect="SELECT user, password FROM credentials WHERE username = ?"
    groupSelect="SELECT user, role FROM user_roles WHERE username = ?";
};
Заметьте, что в параметре dataSourceName мы указали описанный нами ранее в файле tomee.xml источник данных. Чтобы подробнее узнать о параметрах, принимаемых тем или иным модулем логина, обратитесь к его документации. В данном случае мы определили только самые необходимые: JNDI-имя источника данных и два SQL-запроса для выборки имён и паролей пользователей, а также присвоенных пользователям ролей.

Последнее, что нам осталось сделать - это объяснить JVM, где лежит наш сценарий аутентификации. Для этого в каталоге $TOMEE_HOME/bin создайте файл setenv.sh с правами на выполнение и впишите в него следующую строку:
CATALINA_OPTS="$CATALINA_OPTS -Djava.security.auth.login.config=$CATALINA_HOME/conf/login.config"

Традиционно, если вдруг случится так, что функциональность стандартных модулей логина вас не устроит, вы всегда можете создать свой собственный, упаковать его в JAR и положить в каталог $TOMEE_HOME/lib. После этого можете смело указывать класс вашего модуля логина в сценариях аутентификации.

Засим откланяюсь. Приятного вам программирования.

Комментариев нет:

Отправить комментарий