Путаница по поводу ‹security-role› в web.xml

Я понимаю, что <security-role><role-name>Admin</role-name></security-role> предназначен для сопоставления контейнера с tomcat-users.xml (область)

но я запутался, если я не использовал область, но я использую базу данных, как контейнер знает, какое поле в моей базе данных предназначено для имени роли, или у него есть соглашение об именах в имени поля базы данных, например «role_name», и контейнер узнает это

Спасибо за каждый совет


person Vtanathip    schedule 14.03.2011    source источник


Ответы (1)


Просто используйте область базы данных и настройте имена таблиц и столбцов в элементе <Realm> в файле конфигурации сервера. Для Tomcat это описано в Realm HOWTO. Вот выдержка из раздела JDBCRealm:

Быстрый старт

Чтобы настроить Tomcat для использования JDBCRealm, вам необходимо выполнить следующие шаги:

  1. Если вы еще этого не сделали, создайте в своей базе данных таблицы и столбцы, соответствующие описанным выше требованиям.
  2. Настройте имя пользователя и пароль базы данных для использования Tomcat, у которого есть как минимум доступ только для чтения к таблицам, описанным выше. (Tomcat никогда не будет пытаться писать в эти таблицы.)
  3. Поместите копию драйвера JDBC, который вы будете использовать, в каталог $CATALINA_HOME/lib. Обратите внимание, что распознаются только файлы JAR!
  4. Настройте элемент <Realm>, как описано ниже, в файле $CATALINA_BASE/conf/server.xml.
  5. Перезапустите Tomcat 6, если он уже запущен.

Атрибуты элемента области

Чтобы настроить JDBCRealm, вы создадите элемент <Realm> и вложите его в свой файл $CATALINA_BASE/conf/server.xml, как описано выше. Атрибуты для JDBCRealm определены в документации по конфигурации Realm.

Пример

Пример сценария SQL для создания необходимых таблиц может выглядеть примерно так (адаптируйте синтаксис в соответствии с требованиями вашей конкретной базы данных):

create table users (
  user_name         varchar(15) not null primary key,  
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key(user_name, role_name)
);

Элементы примера Realm включены (закомментированы) в файл $CATALINA_BASE/conf/server.xml по умолчанию. Вот пример использования базы данных MySQL под названием «authority», настроенной с использованием описанных выше таблиц и доступной с помощью имени пользователя «dbuser» и пароля «dbpass»:

<Realm className="org.apache.catalina.realm.JDBCRealm"
      driverName="org.gjt.mm.mysql.Driver"  
   connectionURL="jdbc:mysql://localhost/authority?user=dbuser&amp;password=dbpass"
       userTable="users" userNameCol="user_name" userCredCol="user_pass"   
   userRoleTable="user_roles" roleNameCol="role_name"/>

Довольно ясно, не так ли? Если у вас уже есть источник данных JDBC, настроенный в Tomcat (для пула соединений и так далее), вы также можете использовать DataSourceRealm вместо этого.

tomcat-users.xml, о котором вы говорите, кстати, называется UserDatabaseRealm< /а>.

person BalusC    schedule 14.03.2011