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 ta...@apache.org on 2006/01/23 03:13:17 UTC

svn commit: r371439 - in /portals/jetspeed-2/trunk/components/profiler/src: java/org/apache/jetspeed/profiler/rules/impl/ test/org/apache/jetspeed/profiler/

Author: taylor
Date: Sun Jan 22 18:13:12 2006
New Revision: 371439

URL: http://svn.apache.org/viewcvs?rev=371439&view=rev
Log:
New Criterion : Role combo resolver 
 Combines all roles into one rolename string
 Example: roles = a,b,c
 RoleCombo = a-b-c

Added:
    portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/RoleComboCriterionResolver.java
Modified:
    portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/StandardResolver.java
    portals/jetspeed-2/trunk/components/profiler/src/test/org/apache/jetspeed/profiler/TestProfiler.java

Added: portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/RoleComboCriterionResolver.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/RoleComboCriterionResolver.java?rev=371439&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/RoleComboCriterionResolver.java (added)
+++ portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/RoleComboCriterionResolver.java Sun Jan 22 18:13:12 2006
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.profiler.rules.impl;
+
+import javax.security.auth.Subject;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.profiler.rules.RuleCriterion;
+import org.apache.jetspeed.profiler.rules.RuleCriterionResolver;
+import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.security.RolePrincipal;
+
+/**
+ * Role combo resolver 
+ * Combines all roles into one string
+ * Example: roles = a,b,c
+ * RoleCombo = a-b-c
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: RoleCriterionResolver.java 187756 2004-10-15 22:58:43Z ate $
+ */
+public class RoleComboCriterionResolver
+    extends StandardResolver
+    implements RuleCriterionResolver
+{
+    protected final static Log log = LogFactory.getLog(UserCriterionResolver.class);
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.profiler.rules.RuleCriterionResolver#resolve(org.apache.jetspeed.request.RequestContext, org.apache.jetspeed.profiler.rules.RuleCriterion)
+     */    
+    public String resolve(RequestContext context, RuleCriterion criterion)
+    {
+        String value = super.resolve(context, criterion);
+        if (value != null)
+        {
+            return value;
+        }
+            
+        Subject subject = context.getSubject();
+        if (subject == null)
+        {
+            String msg = "Invalid (null) Subject in request pipeline";
+            log.error(msg);
+            return null;
+        }
+            
+        return combinePrincipals(context, criterion, subject, RolePrincipal.class);
+     }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.profiler.rules.RuleCriterionResolver#isControl()
+     */
+    public boolean isControl(RuleCriterion criterion)
+    {
+        return true;
+    }
+    
+    
+}

Modified: portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/StandardResolver.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/StandardResolver.java?rev=371439&r1=371438&r2=371439&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/StandardResolver.java (original)
+++ portals/jetspeed-2/trunk/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl/StandardResolver.java Sun Jan 22 18:13:12 2006
@@ -38,6 +38,7 @@
 public class StandardResolver implements RuleCriterionResolver
 {
     public static final String VALUE_DELIMITER = ",";
+    public static final String COMBO_DELIMITER = "-";
     
     /* (non-Javadoc)
      * @see org.apache.jetspeed.profiler.rules.RuleCriterionResolver#resolve(org.apache.jetspeed.request.RequestContext, org.apache.jetspeed.profiler.rules.RuleCriterion)
@@ -89,7 +90,29 @@
         {
             return null;
         }
-        return result.toString();
-        
+        return result.toString();        
     }
+
+    protected String combinePrincipals(RequestContext context, RuleCriterion criterion, Subject subject, Class classe)
+    {
+        StringBuffer result = new StringBuffer();
+        Iterator principals = SecurityHelper.getPrincipals(subject, classe).iterator();
+        int count = 0;
+        while (principals.hasNext())
+        {
+            Principal principal = (Principal)principals.next();
+            if (count > 0)
+            {
+                result.append(COMBO_DELIMITER);
+            }
+            result.append(principal.getName());
+            count++;
+        }
+        if (count == 0)
+        {
+            return null;
+        }
+        return result.toString();        
+    }
+    
 }

Modified: portals/jetspeed-2/trunk/components/profiler/src/test/org/apache/jetspeed/profiler/TestProfiler.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/profiler/src/test/org/apache/jetspeed/profiler/TestProfiler.java?rev=371439&r1=371438&r2=371439&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/profiler/src/test/org/apache/jetspeed/profiler/TestProfiler.java (original)
+++ portals/jetspeed-2/trunk/components/profiler/src/test/org/apache/jetspeed/profiler/TestProfiler.java Sun Jan 22 18:13:12 2006
@@ -121,6 +121,14 @@
         "path.session"
     };
 
+    private static final String URCF_CRITERIA [] =
+    {
+        "user",
+        "navigation",
+        "rolecombo",
+        "path.session"
+    };
+    
     public void testUserRoleFallback() 
     throws Exception
     {
@@ -151,6 +159,37 @@
         
         System.out.println("COMPLETED: running test user role fallback.");
     }
+
+    public void testUserRoleComboFallback() 
+    throws Exception
+    {
+        assertNotNull("profiler service is null", profiler);
+        System.out.println("START: running test user rolecombo fallback...");
+        
+        // make sure rule is set correctly
+        ProfilingRule rule = profiler.getRule("user-rolecombo-fallback");
+        assertNotNull("rule is null ", rule);
+        Iterator c = rule.getRuleCriteria().iterator();
+        int ix = 0;
+        while (c.hasNext())
+        {
+            RuleCriterion rc = (RuleCriterion)c.next();
+            assertTrue("criterion type check " + rc.getType(), rc.getType().equals(URCF_CRITERIA[ix]));
+            System.out.println(rc.getType());
+            ix++;
+        }
+        
+        // test applying it
+        RequestContext context = new MockRequestContext();
+        Subject subject = createSubject2();
+        context.setPath("/homepage.psml");        
+        context.setSubject(subject);
+        ProfileLocator locator = rule.apply(context, profiler);
+        System.out.println("locator = " + locator);
+        assertTrue("locator string " + locator.toString(), locator.toString().equals("/homepage.psml:user:david:navigation:/:role:ATP-NB:page:/homepage.psml"));
+        
+        System.out.println("COMPLETED: running test user role fallback.");
+    }
     
     protected Subject createSubject()
     {
@@ -162,6 +201,19 @@
         principals.add(new RolePrincipalImpl("ATP"));
         principals.add(new RolePrincipalImpl("NB"));        
         principals.add(new RolePrincipalImpl("ATP-NB"));        
+        Subject subject = new Subject(true, principals, publicCredentials, privateCredentials);        
+        return subject;
+    }
+
+    protected Subject createSubject2()
+    {
+        Set principals = new PrincipalsSet();
+        Set publicCredentials = new HashSet();
+        Set privateCredentials = new HashSet();
+        
+        principals.add(new UserPrincipalImpl("david"));
+        principals.add(new RolePrincipalImpl("ATP"));
+        principals.add(new RolePrincipalImpl("NB"));        
         Subject subject = new Subject(true, principals, publicCredentials, privateCredentials);        
         return subject;
     }



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