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
Мобильная версия