From d4630044f17e0423772be6b1a0b93c01f518f31c Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 1 Sep 2016 10:58:46 +0000 Subject: [PATCH] Use context class loader for DATA_ADMIN login git-svn-id: https://svn.argeo.org/commons/trunk@9088 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../argeo/security/core/AbstractSystemExecution.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/security/core/AbstractSystemExecution.java b/org.argeo.cms/src/org/argeo/security/core/AbstractSystemExecution.java index 81eeadf21..c4beeed52 100644 --- a/org.argeo.cms/src/org/argeo/security/core/AbstractSystemExecution.java +++ b/org.argeo.cms/src/org/argeo/security/core/AbstractSystemExecution.java @@ -25,8 +25,7 @@ import org.argeo.ArgeoException; /** Provides base method for executing code with system authorization. */ public abstract class AbstractSystemExecution { - private final static Log log = LogFactory - .getLog(AbstractSystemExecution.class); + private final static Log log = LogFactory.getLog(AbstractSystemExecution.class); private final Subject subject = new Subject(); private final String loginModule = "SYSTEM"; @@ -36,22 +35,30 @@ public abstract class AbstractSystemExecution { * {@link AuthenticationManager} */ protected void authenticateAsSystem() { + ClassLoader origClassLoader = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); try { LoginContext lc = new LoginContext(loginModule, subject); lc.login(); } catch (LoginException e) { throw new ArgeoException("Cannot login as system", e); + } finally { + Thread.currentThread().setContextClassLoader(origClassLoader); } if (log.isTraceEnabled()) log.trace("System authenticated"); } protected void deauthenticateAsSystem() { + ClassLoader origClassLoader = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); try { LoginContext lc = new LoginContext(loginModule, subject); lc.logout(); } catch (LoginException e) { throw new ArgeoException("Cannot logout as system", e); + } finally { + Thread.currentThread().setContextClassLoader(origClassLoader); } } -- 2.30.2