X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fcore%2FAbstractSystemExecution.java;h=c4beeed52444dcc5f40612d5ad7b1714c234da49;hb=673d555da09a1e03dc97058f178229d3b742908f;hp=81eeadf21b146f42d628aeff841c64ba2128d639;hpb=b0d074d8d5e59d320b3e44d64a54476bcc889ba9;p=lgpl%2Fargeo-commons.git 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); } }