You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2006/01/26 20:09:17 UTC

svn commit: r372587 - in /portals/jetspeed-2/trunk: components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/ components/portal/src/java/org/apache/jetspeed/profiler/impl/ jetspeed-api/src/java/org/apache/jetspeed/portalsite/ src/webapp/WEB-...

Author: rwatler
Date: Thu Jan 26 11:09:11 2006
New Revision: 372587

URL: http://svn.apache.org/viewcvs?rev=372587&view=rev
Log:
added root folder/page fallback control to portal-site component and profiler valve: allows requested page acceee to fail with 403/404 in valve w/o automatic fallback

Modified:
    portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteRequestContextImpl.java
    portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/profiler/impl/ProfilerValveImpl.java
    portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/portalsite/PortalSiteSessionContext.java
    portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/pipelines.xml

Modified: portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteRequestContextImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteRequestContextImpl.java?rev=372587&r1=372586&r2=372587&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteRequestContextImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteRequestContextImpl.java Thu Jan 26 11:09:11 2006
@@ -56,6 +56,12 @@
     private Map requestProfileLocators;
 
     /**
+     * requestFallback - flag indicating whether request should fallback to root folder
+     *                   if locators do not select a page or access is forbidden
+     */
+    private boolean requestFallback;
+
+    /**
      * page - cached request profiled page proxy
      */
     private Page requestPage;
@@ -112,10 +118,11 @@
      * @param sessionContext session context
      * @param requestProfileLocators request profile locators
      */
-    public PortalSiteRequestContextImpl(PortalSiteSessionContextImpl sessionContext, Map requestProfileLocators)
+    public PortalSiteRequestContextImpl(PortalSiteSessionContextImpl sessionContext, Map requestProfileLocators, boolean requestFallback)
     {
         this.sessionContext = sessionContext;
         this.requestProfileLocators = requestProfileLocators;
+        this.requestFallback = requestFallback;
     }
 
     /**
@@ -165,7 +172,7 @@
         // cached in this context
         if (requestPage == null)
         {
-            requestPage = sessionContext.selectRequestPage(requestProfileLocators);            
+            requestPage = sessionContext.selectRequestPage(requestProfileLocators, requestFallback);            
         }
         return requestPage;
     }

Modified: portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java?rev=372587&r1=372586&r2=372587&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java Thu Jan 26 11:09:11 2006
@@ -118,26 +118,41 @@
     }
 
     /**
-     * newRequestContext - create a new request context instance
+     * newRequestContext - create a new request context instance with fallback
      *
      * @param requestProfileLocators request profile locators
      * @return new request context instance
      */
     public PortalSiteRequestContext newRequestContext(Map requestProfileLocators)
     {
+        return newRequestContext(requestProfileLocators, true);
+    }
+
+    /**
+     * newRequestContext - create a new request context instance
+     *
+     * @param requestProfileLocators request profile locators
+     * @param requestFallback flag specifying whether to fallback to root folder
+     *                        if locators do not select a page or access is forbidden
+     * @return new request context instance
+     */
+    public PortalSiteRequestContext newRequestContext(Map requestProfileLocators, boolean requestFallback)
+    {
         // TODO - potentially cache N request contexts and reuse
-        return new PortalSiteRequestContextImpl(this, requestProfileLocators);
+        return new PortalSiteRequestContextImpl(this, requestProfileLocators, requestFallback);
     }
 
     /**
      * selectRequestPage - select page proxy for request given profile locators
      *
      * @param requestProfileLocators map of profile locators for request
+     * @param requestFallback flag specifying whether to fallback to root folder
+     *                        if locators do not select a page or access is forbidden
      * @return selected page proxy for request
      * @throws NodeNotFoundException if not found
      * @throws SecurityException if view access not granted
      */
-    public Page selectRequestPage(Map requestProfileLocators) throws NodeNotFoundException
+    public Page selectRequestPage(Map requestProfileLocators, boolean requestFallback) throws NodeNotFoundException
     {
         // validate and update session profile locators if modified
         if (updateSessionProfileLocators(requestProfileLocators))
@@ -170,14 +185,14 @@
             }
             catch (NodeNotFoundException nnfe)
             {
-                if (requestPath.equals(Folder.PATH_SEPARATOR))
+                if (!requestFallback || requestPath.equals(Folder.PATH_SEPARATOR))
                 {
                     throw nnfe;
                 }
             }
             catch (SecurityException se)
             {
-                if (requestPath.equals(Folder.PATH_SEPARATOR))
+                if (!requestFallback || requestPath.equals(Folder.PATH_SEPARATOR))
                 {
                     throw se;
                 }

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/profiler/impl/ProfilerValveImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/profiler/impl/ProfilerValveImpl.java?rev=372587&r1=372586&r2=372587&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/profiler/impl/ProfilerValveImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/profiler/impl/ProfilerValveImpl.java Thu Jan 26 11:09:11 2006
@@ -84,17 +84,25 @@
     private PageManager pageManager;
    
     /**
+     * requestFallback - flag indicating whether request should fallback to root folder
+     *                   if locators do not select a page or access is forbidden
+     */
+    private boolean requestFallback;
+
+    /**
      * ProfilerValveImpl - constructor
      *
      * @param profiler profiler component reference
      * @param portalSite portal site component reference
      * @param pageManager page manager component reference
+     * @param requestFallback flag to enable root folder fallback
      */
-    public ProfilerValveImpl( Profiler profiler, PortalSite portalSite, PageManager pageManager )
+    public ProfilerValveImpl( Profiler profiler, PortalSite portalSite, PageManager pageManager, boolean requestFallback )
     {
         this.profiler = profiler;
         this.portalSite = portalSite;
         this.pageManager = pageManager;
+        this.requestFallback = requestFallback;
     }
      
     /*
@@ -152,7 +160,13 @@
             // and portal site components
             if (locators != null)
             {
-                // get or create portalsite session context
+                // get or create portalsite session context; the session
+                // context maintains the user view of the site and is
+                // searched against to locate the requested page and
+                // used to build site menus from its extent; this is
+                // cached in the session because locators seldom change
+                // during the session so the session view of the site can
+                // be cached unless locators do change;
                 PortalSiteSessionContext sessionContext = (PortalSiteSessionContext)request.getSessionAttribute(PORTAL_SITE_SESSION_CONTEXT_ATTR_KEY);
                 if (sessionContext == null)
                 {
@@ -161,8 +175,15 @@
                 }
 
                 // construct and save a new portalsite request context
-                // using session context and locators map
-                PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
+                // using session context, locators map, and fallback; the
+                // request context uses the locators to initialize or resets
+                // the session context if locators have changed for this
+                // request; the request context also acts as a short term
+                // request cache for the selected page and built menus;
+                // however, creating the request context here does not
+                // select the page or build menus: that is done when the
+                // request context is accessed subsequently
+                PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators, requestFallback);
                 request.setAttribute(PORTAL_SITE_REQUEST_CONTEXT_ATTR_KEY, requestContext);
 
                 // additionally save request context under legacy key
@@ -170,7 +191,14 @@
                 request.setAttribute(PROFILED_PAGE_CONTEXT_ATTR_KEY, requestContext);
 
                 // get profiled page from portalsite request context
-                // and save profile locators map
+                // and save profile locators map; accessing the request
+                // context here and in subsequent valves/decorators
+                // latently selects the page and builds menus from the
+                // user site view using the request context locators;
+                // the managed page accesed here is the raw selected page
+                // as returned by the PageManager component; accessing
+                // the managed page here selects the current page for the
+                // request
                 request.setPage(new ContentPageImpl(requestContext.getManagedPage()));
                 request.setProfileLocators(requestContext.getLocators());
             }
@@ -180,6 +208,12 @@
         }
         catch (SecurityException se)
         {
+            // fallback to portal root folder/default page if
+            // no user is available and request path is not
+            // already attempting to access the root folder;
+            // this is rarely the case since the anonymous
+            // user is normally defined unless the default
+            // security system has been replaced/overridden
             if (request.getRequest().getUserPrincipal() == null &&
                 request.getPath() != null &&
                 !request.getPath().equals("/"))
@@ -191,6 +225,8 @@
                 catch (IOException ioe){}
                 return;
             }
+
+            // return standard HTTP 403 - FORBIDDEN status
             log.error(se.getMessage(), se);
             try
             {                
@@ -203,6 +239,7 @@
         }
         catch (NodeNotFoundException nnfe)
         {
+            // return standard HTTP 404 - NOT FOUND status
             log.error(nnfe.getMessage(), nnfe);
             try
             {

Modified: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/portalsite/PortalSiteSessionContext.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/portalsite/PortalSiteSessionContext.java?rev=372587&r1=372586&r2=372587&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/portalsite/PortalSiteSessionContext.java (original)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/portalsite/PortalSiteSessionContext.java Thu Jan 26 11:09:11 2006
@@ -28,12 +28,22 @@
 public interface PortalSiteSessionContext
 {
     /**
-     * newRequestContext - create a new request context instance
+     * newRequestContext - create a new request context instance with fallback
      *
      * @param requestProfileLocators request profile locators
      * @return new request context instance
      */
     PortalSiteRequestContext newRequestContext(Map requestProfileLocators);
+
+    /**
+     * newRequestContext - create a new request context instance
+     *
+     * @param requestProfileLocators request profile locators
+     * @param requestFallback flag specifying whether to fallback to root folder
+     *                        if locators do not select a page or access is forbidden
+     * @return new request context instance
+     */
+    PortalSiteRequestContext newRequestContext(Map requestProfileLocators, boolean requestFallback);
 
     /**
      * getPageManager - return PageManager component instance

Modified: portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/pipelines.xml
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/pipelines.xml?rev=372587&r1=372586&r2=372587&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/pipelines.xml (original)
+++ portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/pipelines.xml Thu Jan 26 11:09:11 2006
@@ -73,15 +73,21 @@
         class="org.apache.jetspeed.profiler.impl.ProfilerValveImpl"
         init-method="initialize"
   >
-   <constructor-arg>
+   <constructor-arg index="0">
        <ref bean="org.apache.jetspeed.profiler.Profiler" />
    </constructor-arg>
-   <constructor-arg>
+   <constructor-arg index="1">
        <ref bean="org.apache.jetspeed.portalsite.PortalSite" />
    </constructor-arg>
-   <constructor-arg>
+   <constructor-arg index="2">
        <ref bean="org.apache.jetspeed.page.PageManager" />
    </constructor-arg>
+   <!--
+       request fallback to root folder/page enabled by default;
+       if set to false, requests generate HTTP 403/404 errors
+       for access errors or missing pages
+   -->
+   <constructor-arg index="3"><value>true</value></constructor-arg>    
   </bean> 
   
   <bean id="containerValve"



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org