Чего я хочу добиться: только пользователи с ролью "голова" должны иметь доступ к любому пути, соответствующему шаблону "марио/*"
Каков мой сценарий: есть две роли: "голова" и "по умолчанию". Роль «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]');