[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