pac4j/javalin-pac4j

UncaughtException with Javalin PAC4J version 6

william-glanville opened this issue · 1 comments

Actual behavior (the bug)
SseClient keeps adding "clients" - not sure of the cause but it results in a leak as the clients use keepalive

The java logs show

JettyServerThreadPool-124] WARN io.javalin.Javalin - Uncaught exception
java.util.concurrent.CancellationException
at java. Base/java.util.concurrent.CompletableFuture.cancel(CompletableFuture.java:2478)
at io.javalin.http.servlet.JavalinServlet$handleUserFuture$1.invoke(JavalinServlet.kt:65)
at io.javalin.http.servlet.JavalinServlet$handleUserFuture$1.invoke(JavalinServlet.kt:65)
at io.javalin.http.util.AsyncUtil$addListener$5$1.onTimeout(AsyncUtil.kt:46)
at org.eclipse.jetty.server.HttpChannelState$2.run(HttpChannelState.java:660)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1465)
at org.eclipse.jetty.server.HttpChannelState.runInContext(HttpChannelState.java:1208)
at org.eclipse.jetty.server.HttpChannelState.onTimeout(HttpChannelState.java:679)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:518)
at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:457)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:934)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1078)
at java. Base/java.lang.Thread.run(Thread.java:833)

Additionally the SecurityHandler appears to be built against an incorrect dependency as it uses FindBest which was removed ( noted in Release notes )

I suspect these are all linked

i am using the following versions
<io.javalin.version>5.3.2</io.javalin.version>
<io.javalin.openapi.version>4.6.7</io.javalin.openapi.version>
<io.javalin.community.ssl.version>5.3.2</io.javalin.community.ssl.version>
<javalin-pac4j.version>6.0.0</javalin-pac4j.version>
<pac4j.version>6.0.0-RC5</pac4j.version>

This issue affects the SSE side on the browser which now fails to receive some events

Error for FindBest

[JettyServerThreadPool-57] ERROR io.javalin.Javalin - Exception occurred while servicing http-request
java.lang.NoClassDefFoundError: org/pac4j/core/util/FindBest
at org.pac4j.javalin.SecurityHandler.handle(SecurityHandler.java:43)
at io.javalin.routing.HandlerEntry.handle(HandlerEntry.kt:19)
at io.javalin.http.servlet.DefaultTasks.BEFORE$lambda-2$lambda-1$lambda-0(DefaultTasks.kt:19)
at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:86)
at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:53)
at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:41)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1570)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:57)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1543)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1302)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at org.eclipse.jetty.server.Server.handle(Server.java:563)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:558)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:379)
at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:146)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:416)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:385)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:272)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:140)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:934)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1078)
at java.base/java.lang.Thread.run(Thread.java:833)

Yes, this is quite normal. The upgrade is in progress. You should use the stable version 6.0.0 which relies on pac4j v5.7.0: https://github.com/pac4j/javalin-pac4j/blob/javalin-pac4j-6.0.0/pom.xml