Keycloak error with Spring Boot: "not a subtype" on tomcat

Viewed 262

While developing a spring boot app we are using keycloak. When starting it with the embedded tomcat in vscode everything works as it should.

On time of deployment we want to put it on a standalone tomcat server, so we copy the war file over and the application gets started. We get a redirect to the keycloak server and after completing the login the redirect back to the page works fine.

Up on loading the page we get the following error:

20-Aug-2021 13:15:31.341 SCHWERWIEGEND [http-nio-8080-exec-10] org.apache.catalina.core.StandardHostValve.invoke Exception Processing /myapplicationpath/
    java.util.ServiceConfigurationError: org.keycloak.adapters.authorization.ClaimInformationPointProviderFactory: org.keycloak.adapters.authorization.cip.ClaimsInformationPointProviderFactory not a subtype
        at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:590)
        at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1237)
        at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1265)
        at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1300)
        at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1385)
        at org.keycloak.adapters.authorization.PolicyEnforcer.loadClaimInformationPointProviders(PolicyEnforcer.java:134)
        at org.keycloak.adapters.authorization.PolicyEnforcer.<init>(PolicyEnforcer.java:87)
        at org.keycloak.adapters.KeycloakDeploymentBuilder$1.call(KeycloakDeploymentBuilder.java:154)
        at org.keycloak.adapters.KeycloakDeploymentBuilder$1.call(KeycloakDeploymentBuilder.java:147)
        at org.keycloak.adapters.KeycloakDeployment.getPolicyEnforcer(KeycloakDeployment.java:537)
        at org.keycloak.adapters.AuthenticatedActionsHandler.isAuthorized(AuthenticatedActionsHandler.java:150)
        at org.keycloak.adapters.AuthenticatedActionsHandler.handledRequest(AuthenticatedActionsHandler.java:60)
        at org.keycloak.adapters.tomcat.AbstractAuthenticatedActionsValve.invoke(AbstractAuthenticatedActionsValve.java:62)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:607)
        at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.invoke(AbstractKeycloakAuthenticatorValve.java:181)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:835)

This is our current keycloak.json file:

{
  "realm": "realmname",
  "auth-server-url": "https://ourkeycloakserver.com/auth/",
  "ssl-required": "none",
  "resource": "clientname",
  "verify-token-audience": true,
  "credentials": {
    "secret": "secret"
  },
  "use-resource-role-mappings": true,
  "confidential-port": 0,
  "policy-enforcer": {}
}

Any idea what we should look at? The keycloak configuration is in our application.properties of spring and works fine with embedded tomcat.

1 Answers

I have the same problem as you.I found that I use tomcat keycloak adapter, but I also import the springboot-keycloak-adapter in pom.xml, I deleted this in my pom.xml, package again and deploy.my program works fine... Maybe you could check it out.

Related