Keycloak: как подключить собственный валидатор?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Keycloak: как подключить собственный валидатор?

Сообщение Anonymous »

Здравствуйте, у меня есть проект, в котором мне нужно проверить код, если выбрана роль «Ученый». Я написал свой валидатор (текущая логика проверки не имеет значения)
package com.example.keycloak;

import org.keycloak.validate.Validator;
import org.keycloak.validate.ValidationContext;
import org.keycloak.validate.ValidationError;
import org.keycloak.validate.ValidatorConfig;

import java.util.Map;

public class ScientistCodeValidator implements Validator {
public static final String ID = "scientist-code-validator";

public String getId() {
return ID;
}

@Override
public ValidationContext validate(
Object value,
String inputHint,
ValidationContext context,
ValidatorConfig config
) {
Map attributes = context.getAttributes();
String role = attributes.get("Role") != null ? attributes.get("Role").toString() : null;
String code = value != null ? value.toString() : null;
if ("Scientist".equals(role)) {
if (code == null || code.length() < 4 || code.length() > 12) {
context.addError(new ValidationError(inputHint, getId(), "Invalid Scientist code (must be 4-12 chars)"));
}
}
return context;
}

}

это мои ресурсы/META-INF/services/org.keycloak.validate.Validator
com.example.keycloak.ScientistCodeValidator

Затем я компилирую свой валидатор в jar, используя пакет mvn clean. после этого я помещаю его в каталог keycloak/providers и копирую в свой докер, вот так
keycloak:
image: quay.io/keycloak/keycloak:24.0
container_name: keycloak
environment:
KC_DB: postgres
KC_DB_URL: ${KEYCLOAK_DB_URL}
KC_DB_USERNAME: ${PGSQL_USER}
KC_DB_PASSWORD: ${PGSQL_PASSWORD}
KC_HOSTNAME: ${KEYCLOAK_HOSTNAME}
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
KC_FEATURES: scripts
ports:
- "${KEYCLOAK_PORT}:8080"
networks:
- mynetwork
depends_on:
db:
condition: service_healthy
command: start-dev --import-realm
volumes:
- ./keycloak/data:/opt/keycloak/data
- ./keycloak/themes:/opt/keycloak/themes
- ./keycloak/providers:/opt/keycloak/providers

тогда я где-то читал, что вы можете добавить свой валидатор в редактор json вашего профиля пользователя, вот так
{
"name": "code",
"displayName": "Access Code",
"validations": {
"scientist-code-validator": {}
},
"permissions": {
"view": [
"admin",
"user"
],
"edit": [
"admin",
"user"
]
},
"multivalued": false
}

но я продолжаю получать следующую ошибку в панели администратора keycloak
  • Не удалось обновить настройки профиля пользователя: [Валидатор 'scientist-code-validator', определенный для атрибута 'code', не существует]
Есть ли какой-нибудь способ добавить логику проверки, чтобы она работала правильно?
/>это мой pom.xml, если это что-то изменит

4.0.0
com.example
keycloak-custom-spi
1.0.0
jar


17
17
24.0.0




org.keycloak
keycloak-core
${keycloak.version}
provided


org.keycloak
keycloak-server-spi
${keycloak.version}
provided


org.keycloak
keycloak-server-spi-private
${keycloak.version}
provided





Подробнее здесь: https://stackoverflow.com/questions/798 ... -validator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»