X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fcore%2FAbstractSystemExecution.java;h=9c3e5cd8390f43f875e588f6f7890f1c5e039813;hb=c873a0359345503b8e3ca07828bd99d525ec7cc0;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..9c3e5cd83 100644 --- a/org.argeo.cms/src/org/argeo/security/core/AbstractSystemExecution.java +++ b/org.argeo.cms/src/org/argeo/security/core/AbstractSystemExecution.java @@ -21,12 +21,11 @@ import javax.security.auth.login.LoginException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.ArgeoException; +import org.argeo.cms.CmsException; /** 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); + throw new CmsException("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); + throw new CmsException("Cannot logout as system", e); + } finally { + Thread.currentThread().setContextClassLoader(origClassLoader); } }