]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java
- Fix JCR security model initialisation order
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / AbstractCmsEntryPoint.java
index 8d68fc1208ab17d35b3b7727368a2efd89bfc867..60758da887d63b66b80af07bf4317cab780b0690 100644 (file)
@@ -1,5 +1,7 @@
 package org.argeo.cms;
 
+import static org.argeo.cms.internal.kernel.KernelConstants.SPRING_SECURITY_CONTEXT_KEY;
+
 import java.util.Locale;
 import java.util.ResourceBundle;
 
@@ -8,9 +10,11 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
+import javax.servlet.http.HttpSession;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+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,11 +23,12 @@ 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;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.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 Repository repository;
@@ -39,8 +44,16 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint
        private BrowserNavigation history;
 
        public AbstractCmsEntryPoint(Repository repository, String workspace) {
-               if (SecurityContextHolder.getContext().getAuthentication() == null)
-                       logAsAnonymous();
+               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;
@@ -200,15 +213,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 +241,9 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint
                return state;
        }
 
-       protected String getPage() {
-               return page;
-       }
+       // String getPage() {
+       // return page;
+       // }
 
        protected Throwable getException() {
                return exception;