вопрос о сферах безопасности GlassFish / Tomcat - PullRequest
1 голос
/ 08 марта 2011

У меня установлен GlassFish для использования "JDBCRealm". Конфигурация выглядит так и работает нормально:

<JDBCRealm userTable="users" userNameCol="user_name" 
userCredCol="user_pass" userRoleTable="user_roles" 
roleNameCol="role_name" ... />

Моя база данных в настоящее время выглядит так:

- USERS -
USER_NAME | USER_PASS
steve | password1

- USER_ROLES -
USER_NAME | ROLE_NAME
steve | ADMIN

Мой вопрос: если я хочу нормализовать данные в базе данных, как мне настроить область, которая может понимать новый дизайн базы данных? Должен ли я написать собственный объект «царство» или что-то в этом роде?

Вместо этого я хочу, чтобы моя база данных выглядела следующим образом:

- USERS -
USER_ID | USER_NAME | USER_PASS
1 | steve | password1

- ROLES -
ROLE_ID | ROLE_NAME
2 | ADMIN

- USER_ROLES -
USER_ID | ROLE_ID
1 | 2

Любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Способ решения этой проблемы - нормализация базы данных и создание представлений для Glassfish.

                      Table "public.admin"
    Column     |            Type             | Modifiers 
---------------+-----------------------------+-----------
 id            | bigint                      | not null
 login         | character varying(255)      | not null
 password      | character varying(255)      | not null


             Table "public.role"
 Column |          Type          | Modifiers 
--------+------------------------+-----------
 id     | bigint                 | not null
 name   | character varying(255) | 



  Table "public.role_admins"
  Column  |  Type  | Modifiers 
----------+--------+-----------
 role_id  | bigint | not null
 admin_id | bigint | not null

Вот представление:

           View "public.v_admin_role"
  Column   |          Type          | Modifiers 
-----------+------------------------+-----------
 login     | character varying(255) | 
 password  | character varying(255) | 
 role_name | character varying(255) | 
View definition:
 SELECT a.login, a.password, r.name AS role_name
   FROM admin a
   JOIN role_admins ra ON ra.admin_id = a.id
   JOIN role r ON r.id = ra.role_id
  WHERE a.active = true;

И конфигурация

<auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="gcsiadmin">
  <property name="user-name-column" value="login"/>
  <property name="password-column" value="password"/>
  <property name="group-name-column" value="role_name"/>
  <property name="datasource-jndi" value="jdbc/GcsiDS"/>
  <property name="user-table" value="v_admin_role"/>
  <property name="group-table" value="v_admin_role"/>
  <property name="jaas-context" value="jdbcRealm"/>
</auth-realm>
1 голос
/ 08 марта 2011

Это должно работать просто.Я только что сделал это несколько дней назад для сервера Glassfish.Но я думаю, что это должно быть похоже на Tomcat.У меня есть 3 таблицы:

  • user (логин (pk), пароль, ...)
  • group (group_id (pk), group_name)
  • group_has_user (login (fk из таблицы пользователей), group_id (fk из таблицы групп))

моя область JDBC выглядит следующим образом:

<auth-realm name="Register-User" classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm">
          <property name="jaas-context" value="jdbcRealm" />
          <property name="datasource-jndi" value="jdbc/ladb" />
          <property name="user-table" value="user" />
          <property name="user-name-column" value="login" />
          <property name="password-column" value="password" />
          <property name="group-table" value="group_has_user" />
          <property name="group-name-column" value="group_id" />
          <property name="digest-algorithm" value="SHA-256" />

Если вывозникли проблемы, убедитесь, что столбцы group_id имеют одинаковые имена в таблице групп и в таблице соединений.

...