GlassFish JDBC Realm Устранение неполадок jdbcrealm.grouperror

Чего я хочу добиться: только пользователи с ролью "голова" должны иметь доступ к любому пути, соответствующему шаблону "марио/*"

Каков мой сценарий: есть две роли: "голова" и "по умолчанию". Роль «head» сопоставляется с именем группы «HEADS». Роль «по умолчанию» сопоставляется с именем группы «ПОЛЬЗОВАТЕЛИ». Каждому зарегистрированному пользователю назначается эта последняя группа в соответствии с моей конфигурацией области jdbc.

Я назначил группы «ПОЛЬЗОВАТЕЛИ, ГОЛОВЫ» пользователю с электронной почтой «[email protected]», а затем попытался войти в систему. Вход прошел успешно, но пользователю была назначена только роль «ПОЛЬЗОВАТЕЛИ». Проблема в том, что пользователю не назначена роль "head"., ВЫЗЫВАЯ ОТВЕТ HTTP 403. Что не так?

Попытаться исправить

Я перешел к своей конфигурации области jdbc и изменил значение входного поля, помеченного «Назначить группы:», на следующее: «ПОЛЬЗОВАТЕЛИ, ГОЛОВЫ». Это заставило каждого зарегистрированного пользователя быть назначенным обеим группам. Это не то, чего я хотел. Я снова изменил конфигурацию области и установил для параметра «Назначить группы» значение «ПОЛЬЗОВАТЕЛИ».

Что мне сообщают журналы сервера: jdbcrealm.grouperror

Какова моя конфигурация области JDBC: введите здесь описание изображения

Моя версия стеклянной рыбки: 5

Сопоставление ролей:

 <security-role-mapping>
        <role-name>head</role-name>
        <group-name>HEADS</group-name>
    </security-role-mapping>

    <security-role-mapping>
        <role-name>default</role-name>
        <group-name>USERS</group-name>
    </security-role-mapping>

Определения ограничений безопасности:

  <security-constraint>

        <web-resource-collection>
            <web-resource-name>Restricted</web-resource-name>
            <url-pattern>/mario/*</url-pattern>
        </web-resource-collection>

        <auth-constraint>
            <role-name>head</role-name>
        </auth-constraint>

    </security-constraint>

 <security-constraint>

        <web-resource-collection>
            <web-resource-name>Everyone user can access</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>

        <auth-constraint>
            <role-name>default</role-name>
        </auth-constraint>

    </security-constraint>

   <security-role>
        <role-name>admin</role-name>
    </security-role>

    <security-role>
        <role-name>default</role-name>
    </security-role>

Моя база данных: изменено с https://docs.oracle.com/javaee/6/tutorial/doc/glxgo.html

 CREATE TABLE "FOREST"."PERSON"
(
  ID int NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
      (START WITH 1, INCREMENT BY 1),
  FIRSTNAME varchar(50) NOT NULL,
  LASTNAME varchar(100) NOT NULL,
  EMAIL varchar(45) NOT NULL UNIQUE,
  ADDRESS varchar(45) NOT NULL,
  CITY varchar(45) NOT NULL,
  PASSWORD varchar(100),
  DTYPE varchar(31)
)
;
CREATE UNIQUE INDEX SQL_PERSON_EMAIL_INDEX ON "FOREST"."PERSON"(EMAIL)
;
CREATE UNIQUE INDEX SQL_PERSON_ID_INDEX ON "FOREST"."PERSON"(ID)
;
CREATE TABLE "FOREST"."GROUPS"
(
   ID int NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
       (START WITH 1, INCREMENT BY 1),
   NAME varchar(50) NOT NULL,
   DESCRIPTION varchar(300)
)
;
CREATE TABLE "FOREST"."PERSON_GROUPS"
(
  GROUPS_ID int NOT NULL,
  EMAIL varchar(45) NOT NULL
)
;
ALTER TABLE "FOREST"."PERSON_GROUPS"
ADD CONSTRAINT FK_PERSON_GROUPS_PERSON
FOREIGN KEY (EMAIL)
REFERENCES "FOREST"."PERSON"(EMAIL)
;
ALTER TABLE "FOREST"."PERSON_GROUPS"
ADD CONSTRAINT FK_PERSON_GROUPS_GROUPS
FOREIGN KEY (GROUPS_ID)
REFERENCES "FOREST"."GROUPS"(ID)
;
CREATE INDEX SQL_PERSONGROUPS_EMAIL_INDEX ON "FOREST"."PERSON_GROUPS"(EMAIL)
;
CREATE INDEX SQL_PERSONGROUPS_ID_INDEX ON "FOREST"."PERSON_GROUPS"(GROUPS_ID)

INSERT INTO "FOREST"."PERSON" (FIRSTNAME,LASTNAME,EMAIL,ADDRESS,CITY,
PASSWORD,DTYPE) VALUES ('Robert','Exampler','[email protected]',
'Example street','San Francisco','81dc9bdb52d04dc20036dbd8313ed055',
'Customer');
INSERT INTO "FOREST"."PERSON" (FIRSTNAME,LASTNAME,EMAIL,ADDRESS,CITY,
PASSWORD,DTYPE) VALUES ('Admin','Admin','[email protected]','Example street',
'Belmont','81dc9bdb52d04dc20036dbd8313ed055','Administrator');
INSERT INTO "FOREST"."PERSON" (FIRSTNAME,LASTNAME,EMAIL,ADDRESS,CITY,
PASSWORD,DTYPE) VALUES ('Jack','Frost','[email protected]','Example Blvd',
'San Francisco','81dc9bdb52d04dc20036dbd8313ed055','Customer');
INSERT INTO "FOREST"."PERSON" (FIRSTNAME,LASTNAME,EMAIL,ADDRESS,CITY,
PASSWORD,DTYPE) VALUES ('Payment','User','[email protected]',
'-','-','58175e1df62779046a3a4e2483575937','Customer');

INSERT INTO "FOREST"."GROUPS" (NAME, DESCRIPTION) 
VALUES ('USERS', 'Users of the store');
INSERT INTO "FOREST"."GROUPS" (NAME, DESCRIPTION) 
VALUES ('ADMINS', 'Administrators of the store');
INSERT INTO "FOREST"."GROUPS" (NAME, DESCRIPTION) 
VALUES ('HEADS', 'The God Users');

INSERT INTO "FOREST"."PERSON_GROUPS" (GROUPS_ID,EMAIL) 
VALUES (1,'[email protected]');
INSERT INTO "FOREST"."PERSON_GROUPS" (GROUPS_ID,EMAIL) 
VALUES (3,'[email protected]');
INSERT INTO "FOREST"."PERSON_GROUPS" (GROUPS_ID,EMAIL) 
VALUES (2,'[email protected]');
INSERT INTO "FOREST"."PERSON_GROUPS" (GROUPS_ID,EMAIL) 
VALUES (1,'[email protected]');
INSERT INTO "FOREST"."PERSON_GROUPS" (GROUPS_ID,EMAIL) 
VALUES (1,'[email protected]');

person m_junior    schedule 08.04.2016    source источник
comment
Проблема может заключаться в конфигурации таблицы PERSON_GROUPS. Внешний ключ должен быть идентификатором PERSON, а не электронной почтой.   -  person S.Stavreva    schedule 10.04.2016
comment
Это не проблема. Я вытащил эту схему базы данных с веб-сайта оракула. Пройдите по ссылке и убедитесь в этом сами. Он должен работать. Здесь   -  person m_junior    schedule 11.04.2016
comment
Вы пробовали мое предложение? Я уже видел сайт оракула.   -  person S.Stavreva    schedule 11.04.2016
comment
Вы нашли какое-нибудь решение для этого? У меня сейчас такая же проблема...   -  person Wecherowski    schedule 03.10.2016


Ответы (1)


Проблема связана с настройкой групп в одном из следующих мест.

  1. Web.xml => настройка авторизации для ограничения безопасности
  2. Glassfish-web.xml => Указание имени группы для ролей
  3. База данных => имя группы, указанное в вашей таблице групп
person Saleh    schedule 12.09.2018