X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2FAbstractCmsEntryPoint.java;h=1e04bc050ac46922516c429f0c4c326fd50c5026;hb=85ced0e58ded00f296948b6dff51f84994855080;hp=8d68fc1208ab17d35b3b7727368a2efd89bfc867;hpb=998cdf60d00ffc35d987bdb373a9676b095f16f8;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java b/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java index 8d68fc120..1e04bc050 100644 --- a/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java +++ b/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java @@ -8,9 +8,14 @@ import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; +import javax.security.auth.Subject; +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.auth.ArgeoLoginContext; +import org.argeo.cms.i18n.Msg; import org.argeo.jcr.JcrUtils; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.application.AbstractEntryPoint; @@ -19,13 +24,14 @@ import org.eclipse.rap.rwt.client.service.BrowserNavigationEvent; import org.eclipse.rap.rwt.client.service.BrowserNavigationListener; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; -import org.springframework.security.context.SecurityContextHolder; /** Manages history and navigation */ -public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint - implements CmsSession { +abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements + CmsSession { private final Log log = LogFactory.getLog(AbstractCmsEntryPoint.class); + private Subject subject = new Subject(); + private Repository repository; private String workspace; private Session session; @@ -39,11 +45,25 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint private BrowserNavigation history; public AbstractCmsEntryPoint(Repository repository, String workspace) { - if (SecurityContextHolder.getContext().getAuthentication() == null) - logAsAnonymous(); - this.repository = repository; this.workspace = workspace; + + // Initial login + Subject subject = new Subject(); + try { + new ArgeoLoginContext(KernelHeader.LOGIN_CONTEXT_USER, subject) + .login(); + } catch (LoginException e) { + if (log.isTraceEnabled()) + log.trace("Cannot authenticate user", e); + try { + new ArgeoLoginContext(KernelHeader.LOGIN_CONTEXT_ANONYMOUS, + subject).login(); + } catch (LoginException eAnonymous) { + throw new ArgeoException("Cannot initialize subject", + eAnonymous); + } + } authChange(); history = RWT.getClient().getService(BrowserNavigation.class); @@ -75,9 +95,6 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint /** Recreate body UI */ protected abstract void refreshBody(); - /** Log as anonymous */ - protected abstract void logAsAnonymous(); - /** * The node to return when no node was found (for authenticated users and * anonymous) @@ -107,6 +124,11 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint history.pushState(state, state); } + @Override + public Subject getSubject() { + return subject; + } + @Override public void authChange() { try { @@ -115,8 +137,6 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint currentPath = node.getPath(); JcrUtils.logoutQuietly(session); - if (SecurityContextHolder.getContext().getAuthentication() == null) - logAsAnonymous(); session = repository.login(workspace); if (currentPath != null) node = session.getNode(currentPath); @@ -200,15 +220,12 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint page = prefix; } else { node = getDefaultNode(session); - if (state.equals("~")) - page = ""; - else - page = state; + page = state; } if (log.isTraceEnabled()) - log.trace("page=" + page + ", node=" + node + ", state=" - + state); + log.trace("node=" + node + ", state=" + state + " (page=" + + page); } catch (RepositoryException e) { throw new CmsException("Cannot retrieve node", e); @@ -231,9 +248,9 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint return state; } - protected String getPage() { - return page; - } + // String getPage() { + // return page; + // } protected Throwable getException() { return exception;