Я хочу применить свой пользовательский поставщик данных пользователя
У меня есть CustomuseStorageProvider.java
Код: Выделить всё
package com.my_app.user_provider;
import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.storage.UserStorageProvider;
import org.keycloak.storage.user.UserLookupProvider;
public class CustomUserStorageProvider implements UserStorageProvider, UserLookupProvider {
private final KeycloakSession session;
public CustomUserStorageProvider(final KeycloakSession session) {
this.session = session;
}
@Override
public UserModel getUserById(final RealmModel realmModel, final String s) {
return null;
}
@Override
public UserModel getUserByUsername(final RealmModel realmModel, final String s) {
UserModel user = session.users().getUserByUsername(realmModel, s);
// Just overwriting the email to check if it works
user.setSingleAttribute("email", "test-email@himls.com");
return user;
}
@Override
public UserModel getUserByEmail(final RealmModel realmModel, final String s) {
return null;
}
@Override
public void close() {
}
}
Код: Выделить всё
package com.my_app.user_provider;
import org.keycloak.component.ComponentModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.storage.UserStorageProviderFactory;
public class CustomUserStorageProviderFactory implements UserStorageProviderFactory {
@Override
public CustomUserStorageProvider create(final KeycloakSession session, final ComponentModel model) {
return new CustomUserStorageProvider(session);
}
@Override
public String getId() {
return "custom-user-storage-provider";
}
}
Код: Выделить всё
com.my_app.user_provider.CustomUserStorageProviderFactory
< /code>
Я создал jar < /p>
mvn clean package
< /code>
скопировал его в контейнер Docker < /p>
docker cp target/my-app-1.0-SNAPSHOT.jar keycloak:/opt/keycloak/providers/
< /code>
и перезапустил контейнер < /p>
В журналах контейнеров я не вижу никаких признаков того, что мой пользовательский поставщик был зарегистрирован < /p>
025-03-07 20:50:53 2025-03-07 18:50:53,811 INFO [com.arjuna.ats.jbossatx] (Shutdown thread) ARJUNA032014: Stopping transaction recovery manager
2025-03-07 20:50:53 2025-03-07 18:50:53,837 INFO [io.quarkus] (Shutdown thread) Keycloak stopped in 0.093s
2025-03-07 20:50:55 Running the server in development mode. DO NOT use this configuration in production.
2025-03-07 20:50:56 2025-03-07 18:50:56,727 INFO [org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory] (ForkJoinPool.commonPool-worker-1) Starting Infinispan embedded cache manager
2025-03-07 20:50:56 2025-03-07 18:50:56,806 INFO [org.infinispan.CONTAINER] (ForkJoinPool.commonPool-worker-1) Virtual threads support enabled
2025-03-07 20:50:56 2025-03-07 18:50:56,934 INFO [org.infinispan.CONTAINER] (ForkJoinPool.commonPool-worker-1) ISPN000556: Starting user marshaller 'org.infinispan.commons.marshall.ImmutableProtoStreamMarshaller'
2025-03-07 20:50:57 2025-03-07 18:50:57,446 INFO [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
2025-03-07 20:50:57 2025-03-07 18:50:57,461 INFO [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_809063, Site name: null
2025-03-07 20:50:58 2025-03-07 18:50:58,028 WARN [io.agroal.pool] (main) Datasource '': JDBC resources leaked: 1 ResultSet(s) and 0 Statement(s)
2025-03-07 20:50:58 2025-03-07 18:50:58,119 INFO [io.quarkus] (main) Keycloak 26.1.3 on JVM (powered by Quarkus 3.15.3.1) started in 3.305s. Listening on: http://0.0.0.0:8080
2025-03-07 20:50:58 2025-03-07 18:50:58,119 INFO [io.quarkus] (main) Profile dev activated.
2025-03-07 20:50:58 2025-03-07 18:50:58,119 INFO [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, keycloak, narayana-jta, opentelemetry, reactive-routes, rest, rest-jackson, smallrye-context-propagation, vertx]
Итак, я предполагаю, что мой пользовательский поставщик данных пользователя не был зарегистрирован.
Что мне делать неправильно?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... n-keycloak