pac4j/javalin-pac4j

Javalin 5.0.0 context.req is now private. NoSuchFieldError

NexRX opened this issue · 4 comments

NexRX commented

Hi,

I'm new to (javalin-)pac4j and I can't see to get authentication to work. Every time I make a request and call...
before(new SecurityHandler(config, "DirectBasicAuthClient,ParameterClient"));

I get the following stack trace

java.lang.NoSuchFieldError: req
	at org.pac4j.javalin.JavalinWebContext.<init>(JavalinWebContext.java:14)
	at org.pac4j.javalin.SecurityHandler.handle(SecurityHandler.java:47)
	at io.javalin.routing.HandlerEntry.handle(HandlerEntry.kt:19)
	at io.javalin.http.servlet.DefaultTasks.BEFORE$lambda-2$lambda-1$lambda-0(DefaultTasks.kt:17)
	at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:79)
	at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:46)
	at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:34)
	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:1571)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
	at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:56)
	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:1544)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1297)
	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:562)
	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:319)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

Weird thing is if I debug the handler I can see javalinctx.req is present but the class can't get it.
I'm using a Config based of the example from this repo. Here is a pastebin link for my build method https://pastebin.com/88ULjH4v

Is there something im missing?

NexRX commented

These are my pac4j gradle dependacies if it helps too. Want anything else, please let me know!

implementation 'io.javalin:javalin:5.0.0'
def pac4jDepVersion = "5.5.0"
implementation "org.pac4j:javalin-pac4j:5.0.1"
implementation "org.pac4j:pac4j-core:$pac4jDepVersion"
implementation "org.pac4j:pac4j-http:$pac4jDepVersion"
implementation "org.pac4j:pac4j-mongo:$pac4jDepVersion"
NexRX commented

I've tried downgrading to 4.6.3 which fixes the issue. The field seems to be private in 5.0.0 of Javalin and has been replaced with a getter ctx.req().
I'll update the issue accordingly

Javalin 5 uses a new jetty version and thus is incompatible with the current javalin-pac4j version. Feel free to try the PR #155 and provide feedback!

javalin-pac4j v6 will be based on Javalin v5. Feel free to use the new v6.0.0-SNAPSHOT...