From 3e76c3244c01e6b34ff5b62a448fbcd4cccf538f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 18 Jun 2023 08:17:35 +0200 Subject: [PATCH] Force context classloader when loggin in to Jackrabbit --- .../security/jackrabbit/ArgeoAuthContext.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/org.argeo.cms.jcr/src/org/argeo/security/jackrabbit/ArgeoAuthContext.java b/org.argeo.cms.jcr/src/org/argeo/security/jackrabbit/ArgeoAuthContext.java index d679c45..97dfdf5 100644 --- a/org.argeo.cms.jcr/src/org/argeo/security/jackrabbit/ArgeoAuthContext.java +++ b/org.argeo.cms.jcr/src/org/argeo/security/jackrabbit/ArgeoAuthContext.java @@ -11,17 +11,32 @@ import org.apache.jackrabbit.core.security.authentication.AuthContext; class ArgeoAuthContext implements AuthContext { private LoginContext lc; + private String loginContextName; + public ArgeoAuthContext(String appName, Subject subject, CallbackHandler callbackHandler) { + this.loginContextName = appName; + // Context class loader for login context is set when it is created. + // we make sure that it uses our won class loader + ClassLoader currentContextCl = Thread.currentThread().getContextClassLoader(); try { - lc = new LoginContext(appName, subject, callbackHandler); + Thread.currentThread().setContextClassLoader(SystemJackrabbitLoginModule.class.getClassLoader()); + lc = new LoginContext(loginContextName, subject, callbackHandler); } catch (LoginException e) { throw new IllegalStateException("Cannot configure Jackrabbit login context", e); + } finally { + Thread.currentThread().setContextClassLoader(currentContextCl); } } @Override public void login() throws LoginException { - lc.login(); + try { + lc.login(); + } catch (LoginException e) { + // we force a runtime exception since Jackrabbit swallows LoginException + // and still create a session + throw new IllegalStateException("Login context " + loginContextName + " failed", e); + } } @Override -- 2.30.2