X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FKernelUtils.java;h=7d296ae0e91e8b1dfbe9dc7d5c8234d9de803be6;hb=3c7803ca05e2b0276d635e64046d924d3f1884c9;hp=a5362c64e7484686ff64a0c2631d84acdc06b1cd;hpb=b97005030b1e0469fcc6dd6a35adb0c134131eaa;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java index a5362c64e..7d296ae0e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java @@ -26,8 +26,6 @@ import javax.security.auth.login.LoginException; import org.apache.commons.logging.Log; import org.argeo.api.DataModelNamespace; import org.argeo.api.NodeConstants; -import org.argeo.cms.CmsException; -import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.util.tracker.ServiceTracker; @@ -160,6 +158,28 @@ class KernelUtils implements KernelConstants { } static Session openAdminSession(final Repository repository, final String workspaceName) { + LoginContext loginContext = loginAsDataAdmin(); + return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + + @Override + public Session run() { + try { + return repository.login(workspaceName); + } catch (RepositoryException e) { + throw new IllegalStateException("Cannot open admin session", e); + } finally { + try { + loginContext.logout(); + } catch (LoginException e) { + throw new IllegalStateException(e); + } + } + } + + }); + } + + static LoginContext loginAsDataAdmin() { ClassLoader currentCl = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(KernelUtils.class.getClassLoader()); LoginContext loginContext; @@ -171,14 +191,24 @@ class KernelUtils implements KernelConstants { } finally { Thread.currentThread().setContextClassLoader(currentCl); } - return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + return loginContext; + } + + static void doAsDataAdmin(Runnable action) { + LoginContext loginContext = loginAsDataAdmin(); + Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { @Override - public Session run() { + public Void run() { try { - return repository.login(workspaceName); - } catch (RepositoryException e) { - throw new IllegalStateException("Cannot open admin session", e); + action.run(); + return null; + } finally { + try { + loginContext.logout(); + } catch (LoginException e) { + throw new IllegalStateException(e); + } } } @@ -197,19 +227,6 @@ class KernelUtils implements KernelConstants { // new Thread(run, "Open service tracker " + st).start(); } - /** - * @return the {@link BundleContext} of the {@link Bundle} which provided this - * class, never null. - * @throws CmsException if the related bundle is not active - */ -// static BundleContext getBundleContext(Class clzz) { -//// Bundle bundle = FrameworkUtil.getBundle(clzz); -// BundleContext bc = Activator.getBundleContext(); -// if (bc == null) -// throw new CmsException("Bundle " + bundle.getSymbolicName() + " is not active"); -// return bc; -// } - static BundleContext getBundleContext() { return Activator.getBundleContext(); }