[keycloak-user] Exception with User Storage SPI priority configuration

Thomas Darimont thomas.darimont at googlemail.com
Thu Nov 3 11:49:47 EDT 2016


Hello,

I'm facing the same problem - could you point me to the commit that fixed
this in master?

Cheers,
Thomas

2016-11-01 15:17 GMT+01:00 Bill Burke <bburke at redhat.com>:

> Its an admin console issue.  I think I fixed it in master, but I 'll
> double check.
>
>
> On 11/1/16 3:35 AM, Niko Köbler wrote:
> > Hi,
> >
> > I just tested and investigated a bit more…
> >
> > When saving a UserStorageProvider, the „priority“ value is sent within
> the config object:
> > {
> >    "id": "320db9e2-6c40-4eb5-868e-95717be36fce",
> >    "name": "my-user-storage",
> >    "providerId": "my-user-storage",
> >    "providerType": "org.keycloak.storage.UserStorageProvider",
> >    "parentId": "demo",
> >    "config": {
> >      "baseUrl": [
> >        "http://localhost:9000"
> >      ],
> >      "basicAuthUsername": [
> >        "admin"
> >      ],
> >      "basicAuthPassword": [
> >        "secret"
> >      ],
> >      "priority": {
> >        "0": "1"
> >      }
> >    }
> > }
> >
> > In contrast to a UserFederationProvider, where the „priority“ value is
> sent as part of the root object, not in the nested config object.
> >
> > When adding a „priority“ config property in my UserStorageProvider, it
> works, but it looks strange in the Admin console, as there are now 2
> priority fields… but it works.
> >
> > Additionally, this error with the priority value leads to some JS error
> messages in the browser console when working with the Admin console. These
> are also gone when using an own „priority“ config property.
> >
> > I’d appreciate any feedback on this, if this is an error or whatever…
> > Thanks!
> >
> > Regards,
> > - Niko
> >
> >
> >
> >> Am 31.10.2016 um 16:15 schrieb Niko Köbler <niko at n-k.de>:
> >>
> >> Hi,
> >>
> >> I just implemented the User Storage SPI as replacement for our User
> Federation SPI.
> >>
> >> Creating the User-Storage Provider works w/o errors, but not Priority
> value will be saved.
> >> When updating the Provider with a value for Priority, it will fail with
> an exception (see below), updating the Provider without setting a value for
> Priority works.
> >>
> >> Do I have to implement/configure something special to get it work?
> >> I based my implementation on the user-storage-jpa-example, provided
> with Keycloak.
> >> Or is it a general error? Should a create a Jira issue for it?
> >>
> >>
> >> The exception/stack trace:
> >> 16:03:14,392 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (default
> task-31) RESTEASY002005: Failed executing PUT /admin/realms/connect/
> components/320db9e2-6c40-4eb5-868e-95717be36fce: org.jboss.resteasy.spi.ReaderException:
> com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize
> instance of java.util.ArrayList out of START_OBJECT token
> >> at [Source: io.undertow.servlet.spec.ServletInputStreamImpl at 1a486a1f;
> line: 1, column: 387] (through reference chain:
> org.keycloak.representations.idm.ComponentRepresentation["
> config"]->org.keycloak.common.util.MultivaluedHashMap["priority"])
> >>              at org.jboss.resteasy.core.MessageBodyParameterInjector.
> inject(MessageBodyParameterInjector.java:184)
> >>              at org.jboss.resteasy.core.MethodInjectorImpl.
> injectArguments(MethodInjectorImpl.java:91)
> >>              at org.jboss.resteasy.core.MethodInjectorImpl.invoke(
> MethodInjectorImpl.java:114)
> >>              at org.jboss.resteasy.core.ResourceMethodInvoker.
> invokeOnTarget(ResourceMethodInvoker.java:295)
> >>              at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(
> ResourceMethodInvoker.java:249)
> >>              at org.jboss.resteasy.core.ResourceLocatorInvoker.
> invokeOnTargetObject(ResourceLocatorInvoker.java:138)
> >>              at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(
> ResourceLocatorInvoker.java:107)
> >>              at org.jboss.resteasy.core.ResourceLocatorInvoker.
> invokeOnTargetObject(ResourceLocatorInvoker.java:133)
> >>              at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(
> ResourceLocatorInvoker.java:107)
> >>              at org.jboss.resteasy.core.ResourceLocatorInvoker.
> invokeOnTargetObject(ResourceLocatorInvoker.java:133)
> >>              at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(
> ResourceLocatorInvoker.java:101)
> >>              at org.jboss.resteasy.core.SynchronousDispatcher.invoke(
> SynchronousDispatcher.java:395)
> >>              at org.jboss.resteasy.core.SynchronousDispatcher.invoke(
> SynchronousDispatcher.java:202)
> >>              at org.jboss.resteasy.plugins.server.servlet.
> ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)
> >>              at org.jboss.resteasy.plugins.server.servlet.
> HttpServletDispatcher.service(HttpServletDispatcher.java:56)
> >>              at org.jboss.resteasy.plugins.server.servlet.
> HttpServletDispatcher.service(HttpServletDispatcher.java:51)
> >>              at javax.servlet.http.HttpServlet.service(
> HttpServlet.java:790)
> >>              at io.undertow.servlet.handlers.
> ServletHandler.handleRequest(ServletHandler.java:85)
> >>              at io.undertow.servlet.handlers.
> FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
> >>              at org.keycloak.services.filters.
> KeycloakSessionServletFilter.doFilter(KeycloakSessionServletFilter.
> java:90)
> >>              at io.undertow.servlet.core.ManagedFilter.doFilter(
> ManagedFilter.java:60)
> >>              at io.undertow.servlet.handlers.
> FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
> >>              at io.undertow.servlet.handlers.
> FilterHandler.handleRequest(FilterHandler.java:84)
> >>              at io.undertow.servlet.handlers.security.
> ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.
> java:62)
> >>              at io.undertow.servlet.handlers.ServletDispatchingHandler.
> handleRequest(ServletDispatchingHandler.java:36)
> >>              at org.wildfly.extension.undertow.security.
> SecurityContextAssociationHandler.handleRequest(
> SecurityContextAssociationHandler.java:78)
> >>              at io.undertow.server.handlers.PredicateHandler.
> handleRequest(PredicateHandler.java:43)
> >>              at io.undertow.servlet.handlers.security.
> SSLInformationAssociationHandler.handleRequest(
> SSLInformationAssociationHandler.java:131)
> >>              at io.undertow.servlet.handlers.security.
> ServletAuthenticationCallHandler.handleRequest(
> ServletAuthenticationCallHandler.java:57)
> >>              at io.undertow.server.handlers.PredicateHandler.
> handleRequest(PredicateHandler.java:43)
> >>              at io.undertow.security.handlers.
> AbstractConfidentialityHandler.handleRequest(
> AbstractConfidentialityHandler.java:46)
> >>              at io.undertow.servlet.handlers.security.
> ServletConfidentialityConstraintHandler.handleRequest(
> ServletConfidentialityConstraintHandler.java:64)
> >>              at io.undertow.security.handlers.
> AuthenticationMechanismsHandler.handleRequest(
> AuthenticationMechanismsHandler.java:60)
> >>              at io.undertow.servlet.handlers.security.
> CachedAuthenticatedSessionHandler.handleRequest(
> CachedAuthenticatedSessionHandler.java:77)
> >>              at io.undertow.security.handlers.
> NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.
> java:50)
> >>              at io.undertow.security.handlers.
> AbstractSecurityContextAssociationHandler.handleRequest(
> AbstractSecurityContextAssociationHandler.java:43)
> >>              at io.undertow.server.handlers.PredicateHandler.
> handleRequest(PredicateHandler.java:43)
> >>              at org.wildfly.extension.undertow.security.jacc.
> JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
> >>              at io.undertow.server.handlers.PredicateHandler.
> handleRequest(PredicateHandler.java:43)
> >>              at io.undertow.server.handlers.PredicateHandler.
> handleRequest(PredicateHandler.java:43)
> >>              at io.undertow.servlet.handlers.ServletInitialHandler.
> handleFirstRequest(ServletInitialHandler.java:284)
> >>              at io.undertow.servlet.handlers.ServletInitialHandler.
> dispatchRequest(ServletInitialHandler.java:263)
> >>              at io.undertow.servlet.handlers.
> ServletInitialHandler.access$000(ServletInitialHandler.java:81)
> >>              at io.undertow.servlet.handlers.ServletInitialHandler$1.
> handleRequest(ServletInitialHandler.java:174)
> >>              at io.undertow.server.Connectors.
> executeRootHandler(Connectors.java:202)
> >>              at io.undertow.server.HttpServerExchange$1.run(
> HttpServerExchange.java:793)
> >>              at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
> >>              at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
> >>              at java.lang.Thread.run(Thread.java:745)
> >> Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can
> not deserialize instance of java.util.ArrayList out of START_OBJECT token
> >> at [Source: io.undertow.servlet.spec.ServletInputStreamImpl at 1a486a1f;
> line: 1, column: 387] (through reference chain:
> org.keycloak.representations.idm.ComponentRepresentation["
> config"]->org.keycloak.common.util.MultivaluedHashMap["priority"])
> >>              at com.fasterxml.jackson.databind.JsonMappingException.
> from(JsonMappingException.java:148)
> >>              at com.fasterxml.jackson.databind.DeserializationContext.
> mappingException(DeserializationContext.java:835)
> >>              at com.fasterxml.jackson.databind.DeserializationContext.
> mappingException(DeserializationContext.java:831)
> >>              at com.fasterxml.jackson.databind.deser.std.
> StringCollectionDeserializer.handleNonArray(StringCollectionDeserializer.
> java:240)
> >>              at com.fasterxml.jackson.databind.deser.std.
> StringCollectionDeserializer.deserialize(StringCollectionDeserializer.
> java:171)
> >>              at com.fasterxml.jackson.databind.deser.std.
> StringCollectionDeserializer.deserialize(StringCollectionDeserializer.
> java:161)
> >>              at com.fasterxml.jackson.databind.deser.std.
> StringCollectionDeserializer.deserialize(StringCollectionDeserializer.
> java:19)
> >>              at com.fasterxml.jackson.databind.deser.std.
> MapDeserializer._readAndBindStringMap(MapDeserializer.java:485)
> >>              at com.fasterxml.jackson.databind.deser.std.
> MapDeserializer.deserialize(MapDeserializer.java:342)
> >>              at com.fasterxml.jackson.databind.deser.std.
> MapDeserializer.deserialize(MapDeserializer.java:26)
> >>              at com.fasterxml.jackson.databind.deser.
> SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
> >>              at com.fasterxml.jackson.databind.deser.impl.
> MethodProperty.deserializeAndSet(MethodProperty.java:95)
> >>              at com.fasterxml.jackson.databind.deser.impl.
> BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
> >>              at com.fasterxml.jackson.databind.deser.BeanDeserializer.
> vanillaDeserialize(BeanDeserializer.java:248)
> >>              at com.fasterxml.jackson.databind.deser.
> BeanDeserializer.deserialize(BeanDeserializer.java:136)
> >>              at com.fasterxml.jackson.databind.ObjectReader._bind(
> ObjectReader.java:1410)
> >>              at com.fasterxml.jackson.databind.ObjectReader.
> readValue(ObjectReader.java:860)
> >>              at org.jboss.resteasy.plugins.providers.jackson.
> ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider.java:121)
> >>              at org.jboss.resteasy.core.interception.
> AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorConte
> xt.java:61)
> >>              at org.jboss.resteasy.core.interception.
> ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext
> .java:60)
> >>              at org.jboss.resteasy.core.interception.
> AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorConte
> xt.java:53)
> >>              at org.jboss.resteasy.security.doseta.
> DigitalVerificationInterceptor.aroundReadFrom(
> DigitalVerificationInterceptor.java:34)
> >>              at org.jboss.resteasy.core.interception.
> AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorConte
> xt.java:55)
> >>              at org.jboss.resteasy.plugins.interceptors.encoding.
> GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59)
> >>              at org.jboss.resteasy.core.interception.
> AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorConte
> xt.java:55)
> >>              at org.jboss.resteasy.core.MessageBodyParameterInjector.
> inject(MessageBodyParameterInjector.java:151)
> >>              ... 48 more
> >>
> >>
> >> Regards,
> >> - Niko
> >>
> >>
> >> _______________________________________________
> >> keycloak-user mailing list
> >> keycloak-user at lists.jboss.org
> >> https://lists.jboss.org/mailman/listinfo/keycloak-user
> >
> > _______________________________________________
> > keycloak-user mailing list
> > keycloak-user at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/keycloak-user
>
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user
>


More information about the keycloak-user mailing list