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=cd7eae42346104197264428562d6768bf26da6a1;hpb=0aace113e5cd3c265f2a1c7aeec5bac565fe581a;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 cd7eae423..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,13 @@ 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; @@ -20,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.core.context.SecurityContextHolder; /** Manages history and navigation */ 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; @@ -40,20 +45,25 @@ abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements private BrowserNavigation history; public AbstractCmsEntryPoint(Repository repository, String workspace) { - // if (SecurityContextHolder.getContext().getAuthentication() == null) { - // HttpSession httpSession = RWT.getRequest().getSession(); - // // log.debug("Session: " + httpSession.getId()); - // SecurityContext contextFromSessionObject = (SecurityContext) - // httpSession - // .getAttribute(SPRING_SECURITY_CONTEXT_KEY); - // if (contextFromSessionObject != null) - // SecurityContextHolder.setContext(contextFromSessionObject); - // else - // 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); @@ -85,9 +95,6 @@ abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements /** 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) @@ -117,6 +124,11 @@ abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements history.pushState(state, state); } + @Override + public Subject getSubject() { + return subject; + } + @Override public void authChange() { try { @@ -125,8 +137,6 @@ abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements currentPath = node.getPath(); JcrUtils.logoutQuietly(session); - if (SecurityContextHolder.getContext().getAuthentication() == null) - logAsAnonymous(); session = repository.login(workspace); if (currentPath != null) node = session.getNode(currentPath);