[Jboss-cvs] JBossAS SVN: r56670 - trunk/security/src/main/org/jboss/security/plugins

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Sep 8 16:02:36 EDT 2006


Author: anil.saldhana at jboss.com
Date: 2006-09-08 16:02:35 -0400 (Fri, 08 Sep 2006)
New Revision: 56670

Added:
   trunk/security/src/main/org/jboss/security/plugins/JBossSecurityContext.java
Log:
JBAS-3576: SecurityContext changes

Added: trunk/security/src/main/org/jboss/security/plugins/JBossSecurityContext.java
===================================================================
--- trunk/security/src/main/org/jboss/security/plugins/JBossSecurityContext.java	2006-09-08 19:43:32 UTC (rev 56669)
+++ trunk/security/src/main/org/jboss/security/plugins/JBossSecurityContext.java	2006-09-08 20:02:35 UTC (rev 56670)
@@ -0,0 +1,186 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */ 
+package org.jboss.security.plugins;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map; 
+
+import org.jboss.logging.Logger;
+import org.jboss.security.AuthenticationManager;
+import org.jboss.security.AuthorizationManager;
+import org.jboss.security.SecurityConstants;
+import org.jboss.security.SecurityContext;  
+import org.jboss.security.Util;
+import org.jboss.security.audit.AuditContext;
+import org.jboss.security.audit.AuditManager;
+import org.jboss.security.config.ApplicationPolicy;
+import org.jboss.security.config.MappingInfo;
+import org.jboss.security.mapping.MappingContext;
+import org.jboss.security.mapping.MappingProvider;
+import org.jboss.security.mapping.config.MappingModuleEntry;
+
+/**
+ *  Implementation of the Security Context for the JBoss AS
+ *  @author <a href="mailto:Anil.Saldhana at jboss.org">Anil Saldhana</a>
+ *  @version $Revision$
+ *  @since  Aug 30, 2006
+ */
+public class JBossSecurityContext extends SecurityContext
+{ 
+   protected static final Logger log = Logger.getLogger(JBossSecurityContext.class); 
+   protected boolean trace = log.isTraceEnabled();  
+   
+   protected Map contextData = new HashMap();
+   
+   protected String securityDomain = SecurityConstants.DEFAULT_APPLICATION_POLICY;
+
+   protected SubjectInfo subjectInfo = null;
+   
+   public static final String ROLES = SecurityConstants.ROLES_IDENTIFIER;
+   
+   public JBossSecurityContext(String securityDomain)
+   {
+      this.securityDomain = securityDomain;
+   }
+
+   /**
+    * @see SecurityContext#getAuthenticationManager()
+    */
+   public AuthenticationManager getAuthenticationManager()
+   {
+      return Util.getAuthenticationManager(securityDomain);
+   }
+
+   /**
+    * @see SecurityContext#getAuthorizationManager()
+    */
+   public AuthorizationManager getAuthorizationManager()
+   { 
+      return Util.getAuthorizationManager(securityDomain);
+   }
+
+   /**
+    * @see SecurityContext#getData()
+    */ 
+   public Map getData()
+   { 
+      return contextData;
+   }
+ 
+   public String getSecurityDomain()
+   { 
+      return securityDomain;
+   }
+ 
+
+   /**
+    * @see SecurityContext#getSubjectInfo()
+    */
+   public SubjectInfo getSubjectInfo()
+   { 
+      return subjectInfo;
+   } 
+   
+   /**
+    * @see SecurityContext#getAuditContext()
+    */
+   public AuditContext getAuditContext()
+   {
+      return AuditManager.getAuditContext(securityDomain);
+   }
+
+   /**
+    * @see SecurityContext#getMappingContext(String)
+    */
+   public MappingContext getMappingContext(String key)
+   { 
+      //Apply Mapping Logic  
+      ApplicationPolicy aPolicy = Util.getApplicationPolicy(securityDomain);
+      
+      if(aPolicy == null)
+      {
+         String defaultDomain = SecurityConstants.DEFAULT_APPLICATION_POLICY;
+         if(trace)
+            log.trace("Application Policy not found for domain=" + securityDomain +
+                  ".Mapping framework will use the default domain:" + defaultDomain);
+         aPolicy = Util.getApplicationPolicy(defaultDomain);
+      } 
+      MappingInfo rmi = null;
+      MappingContext mc = null;
+      if(MappingKeyInfo.ROLE_MAPPING.equals(key))
+      {
+         rmi = aPolicy.getRoleMappingInfo();
+         if(rmi != null)
+         {
+            MappingModuleEntry[] mpe = rmi.getMappingModuleEntry();
+            ArrayList al = new ArrayList();
+            
+            for(int i = 0 ; i < mpe.length; i++)
+            { 
+               MappingProvider mp = getMappingProvider(mpe[i]);
+               if(mp != null)
+                  al.add(mp); 
+            }
+            mc = new MappingContext(al); 
+         }
+      }
+         return mc; 
+   } 
+   
+   //Value Added Methods
+   
+   public void setSubjectInfo(SubjectInfo si)
+   {
+      this.subjectInfo = si;
+   }
+   
+   public void setRoles(Group roles, boolean replace)
+   {
+      Group mergedRoles = roles;
+      if(!replace)
+      {
+         mergedRoles = mergeGroups( (Group)contextData.get(ROLES), roles); 
+      } 
+      contextData.put(ROLES, mergedRoles);
+   }
+   
+   private Group mergeGroups(Group a, Group b)
+   {
+      Group newGroup = b;
+      if(a != null)
+      {
+         Enumeration en = a.members();
+         while(en.hasMoreElements())
+         {
+            newGroup.addMember((Principal)en.nextElement());
+         } 
+      } 
+      return newGroup; 
+   } 
+   
+   private MappingProvider getMappingProvider(MappingModuleEntry mme)
+   {
+      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+      MappingProvider mp = null;
+      try
+      {
+         Class cl = tcl.loadClass(mme.getMappingModuleName());
+         mp = (MappingProvider)cl.newInstance();
+         mp.init(mme.getOptions());
+      }
+      catch(Exception e)
+      {
+         if(trace)
+            log.trace("Error in getting Mapping Provider",e);
+      } 
+      return mp; 
+   } 
+} 
\ No newline at end of file




More information about the jboss-cvs-commits mailing list