[jboss-cvs] JBossAS SVN: r111082 - in projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml: factories and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Mar 31 13:50:05 EDT 2011
Author: anil.saldhana at jboss.com
Date: 2011-03-31 13:50:05 -0400 (Thu, 31 Mar 2011)
New Revision: 111082
Modified:
projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/JBossPDP.java
projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/SecurityActions.java
projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/factories/PolicyFactory.java
projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/util/XACMLPolicyUtil.java
Log:
SECURITY-580: policies from directory
Modified: projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/JBossPDP.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/JBossPDP.java 2011-03-31 17:37:44 UTC (rev 111081)
+++ projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/JBossPDP.java 2011-03-31 17:50:05 UTC (rev 111082)
@@ -21,8 +21,12 @@
*/
package org.jboss.security.xacml.core;
+import java.io.File;
+import java.io.FilenameFilter;
import java.io.InputStream;
import java.io.Serializable;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
@@ -454,22 +458,34 @@
private List<XACMLPolicy> addPolicySets(List<PolicySetType> policySets, boolean topLevel) throws Exception
{
List<XACMLPolicy> list = new ArrayList<XACMLPolicy>();
-
+
for (PolicySetType pst : policySets)
{
String loc = pst.getLocation();
- XACMLPolicy policySet = PolicyFactory.createPolicySet(getInputStream(loc), policyFinder);
- list.add(policySet);
+ log.info("Reading policysets from location="+loc);
+ if( isDirectory(loc))
+ {
+ InputStream[] streams = this.readPoliciesFromDir(loc);
+ for( InputStream stream : streams)
+ {
+ list.add(PolicyFactory.create(stream, policyFinder));
+ }
+ policies.addAll(list);
+ }
+ else
+ {
+ XACMLPolicy policySet = PolicyFactory.createPolicySet(getInputStream(loc), policyFinder);
+ list.add(policySet);
+ List<XACMLPolicy> policyList = this.addPolicies(pst.getPolicy());
+ policySet.setEnclosingPolicies(policyList);
- List<XACMLPolicy> policyList = this.addPolicies(pst.getPolicy());
- policySet.setEnclosingPolicies(policyList);
+ List<PolicySetType> pset = pst.getPolicySet();
+ if (pset != null)
+ policySet.getEnclosingPolicies().addAll(this.addPolicySets(pset, false));
- List<PolicySetType> pset = pst.getPolicySet();
- if (pset != null)
- policySet.getEnclosingPolicies().addAll(this.addPolicySets(pset, false));
-
- if (topLevel)
- policies.add(policySet);
+ if (topLevel)
+ policies.add(policySet);
+ }
}
return list;
@@ -558,6 +574,80 @@
throw new RuntimeException(jxb);
}
}
+
+ private boolean isDirectory(String location)
+ {
+ boolean result = false;
+ File file = new File(location);
+ result = (file !=null && file.isDirectory());
+ URI uri = null;
+
+ if( !result)
+ {
+ uri = getResourceViaClassLoader(SecurityActions.getContextClassLoader(), location);
+ if( uri != null)
+ {
+ file = new File( uri );
+ }
+ result = (file !=null && file.isDirectory());
+ }
+ if( !result)
+ {
+ uri = getResourceViaClassLoader(SecurityActions.getClassLoader(getClass()), location);
+ if( uri != null)
+ {
+ file = new File( uri );
+ }
+ result = (file !=null && file.isDirectory());
+ }
+ return result;
+ }
+
+ private URI getResourceViaClassLoader( ClassLoader cl, String location)
+ {
+ URL url = cl.getResource(location);
+ if( url != null )
+ {
+ try
+ {
+ return url.toURI();
+ }
+ catch (URISyntaxException e)
+ {
+ // ignore
+ }
+ }
+ return null;
+ }
+
+ private InputStream[] readPoliciesFromDir( String location)
+ {
+ URI uri = getResourceViaClassLoader(SecurityActions.getContextClassLoader(), location);
+ if( uri == null)
+ uri = getResourceViaClassLoader(SecurityActions.getClassLoader(getClass()), location);
+
+ if( uri == null )
+ throw new RuntimeException("Unable to load the URI:" + location);
+
+ ArrayList<InputStream> list = new ArrayList<InputStream>();
+ File dir = new File(uri);
+ if( dir == null || !dir.isDirectory())
+ throw new RuntimeException( location + " is not a directory" );
+ String[] files = dir.list(new FilenameFilter()
+ {
+ public boolean accept(File dir, String name)
+ {
+ return !name.startsWith(".");
+ }
+ });
+ for( String fileName: files)
+ {
+ list.add(getInputStream(location + fileName));
+ }
+ InputStream[] isArr = new InputStream[list.size()];
+ list.toArray(isArr);
+ return isArr;
+ }
private InputStream getInputStream(String loc)
{
Modified: projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/SecurityActions.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/SecurityActions.java 2011-03-31 17:37:44 UTC (rev 111081)
+++ projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/core/SecurityActions.java 2011-03-31 17:50:05 UTC (rev 111082)
@@ -48,6 +48,17 @@
});
}
+ static ClassLoader getClassLoader( final Class<?> clazz)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+ {
+ public ClassLoader run()
+ {
+ return clazz.getClassLoader();
+ }
+ });
+ }
+
static String getSystemProperty(final String key)
{
return AccessController.doPrivileged(new PrivilegedAction<String>()
Modified: projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/factories/PolicyFactory.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/factories/PolicyFactory.java 2011-03-31 17:37:44 UTC (rev 111081)
+++ projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/factories/PolicyFactory.java 2011-03-31 17:50:05 UTC (rev 111082)
@@ -45,8 +45,12 @@
*/
public class PolicyFactory
{
- public static Class<?> constructingClass = JBossXACMLPolicy.class;
+ private static Class<?> constructingClass = JBossXACMLPolicy.class;
+ /**
+ * Set the class that constructs {@link XACMLPolicy}
+ * @param clazz
+ */
public static void setConstructingClass(Class<?> clazz)
{
if (XACMLPolicy.class.isAssignableFrom(clazz) == false)
@@ -54,6 +58,10 @@
constructingClass = clazz;
}
+ /**
+ * Set the class that constructs {@link XACMLPolicy}
+ * @param fqn
+ */
public static void setConstructingClass(String fqn)
{
ClassLoader tcl = SecurityActions.getContextClassLoader();
@@ -67,24 +75,49 @@
}
}
+ /**
+ * Create a {@link XACMLPolicy}
+ * @param policySetFile
+ * @return
+ * @throws Exception
+ */
public static XACMLPolicy createPolicySet(InputStream policySetFile) throws Exception
{
return (XACMLPolicy) getCtr().newInstance(new Object[]
{policySetFile, XACMLPolicy.POLICYSET});
}
+ /**
+ * Create {@link XACMLPolicy}
+ * @param policySetFile inputstream to a policyset
+ * @param theFinder
+ * @return
+ * @throws Exception
+ */
public static XACMLPolicy createPolicySet(InputStream policySetFile, JBossPolicyFinder theFinder) throws Exception
{
return (XACMLPolicy) getCtrWithFinder().newInstance(new Object[]
{policySetFile, XACMLPolicy.POLICYSET, theFinder});
}
+ /**
+ * Create a {@link XACMLPolicy}
+ * @param policyFile inputstream to a Policy
+ * @return
+ * @throws Exception
+ */
public static XACMLPolicy createPolicy(InputStream policyFile) throws Exception
{
return (XACMLPolicy) getCtr().newInstance(new Object[]
{policyFile, XACMLPolicy.POLICY});
}
+ /**
+ * Construct {@link XACMLPolicy}
+ * @param policyFile a {@link PolicyType}
+ * @return
+ * @throws Exception
+ */
public static XACMLPolicy createPolicy(PolicyType policyFile) throws Exception
{
JAXBElement<PolicyType> jaxbPolicy = new ObjectFactory().createPolicy(policyFile);
@@ -94,6 +127,21 @@
return (XACMLPolicy) getCtr().newInstance(new Object[]
{bis, XACMLPolicy.POLICY});
}
+
+ /**
+ * Create {@link XACMLPolicy}
+ * @param is an inputstream to a policy or policyset
+ * @param finder a {@link JBossPolicyFinder}
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public static XACMLPolicy create(InputStream is, JBossPolicyFinder finder) throws Exception
+ {
+ Constructor<XACMLPolicy> ctr = (Constructor<XACMLPolicy>) constructingClass.getConstructor(new Class[]{
+ InputStream.class,JBossPolicyFinder.class});
+ return ctr.newInstance(new Object[]{is, finder});
+ }
@SuppressWarnings("unchecked")
private static Constructor<XACMLPolicy> getCtr() throws Exception
@@ -108,4 +156,4 @@
return (Constructor<XACMLPolicy>) constructingClass.getConstructor(new Class[]
{InputStream.class, Integer.TYPE, JBossPolicyFinder.class});
}
-}
+}
\ No newline at end of file
Modified: projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/util/XACMLPolicyUtil.java
===================================================================
--- projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/util/XACMLPolicyUtil.java 2011-03-31 17:37:44 UTC (rev 111081)
+++ projects/security/security-xacml/trunk/jboss-xacml/src/main/java/org/jboss/security/xacml/util/XACMLPolicyUtil.java 2011-03-31 17:50:05 UTC (rev 111082)
@@ -29,10 +29,12 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import org.jboss.security.xacml.sunxacml.AbstractPolicy;
import org.jboss.security.xacml.sunxacml.Policy;
import org.jboss.security.xacml.sunxacml.PolicySet;
import org.jboss.security.xacml.sunxacml.finder.PolicyFinder;
import org.w3c.dom.Document;
+import org.w3c.dom.Node;
import org.xml.sax.SAXException;
/**
@@ -44,6 +46,25 @@
public class XACMLPolicyUtil
{
/**
+ * Construct {@link AbstractPolicy}
+ * @param is inputstream to a policy or policyset
+ * @param finder
+ * @return
+ * @throws Exception
+ */
+ public AbstractPolicy create(InputStream is, PolicyFinder finder) throws Exception
+ {
+ if (finder == null)
+ throw new IllegalArgumentException("Policy Finder is null");
+ Document doc = getDocument(is);
+ Node root = doc.getFirstChild();
+ if( root.getNodeName().contains("PolicySet"))
+ {
+ return PolicySet.getInstance(root, finder);
+ }
+ return Policy.getInstance(root);
+ }
+ /**
* Create a PolicySet
* @param location location of the policy set file
* @param finder PolicyFinder instance
@@ -91,7 +112,7 @@
{
Document doc = getDocument(is);
return Policy.getInstance(doc.getFirstChild());
- }
+ }
private Document getDocument(InputStream is) throws ParserConfigurationException, SAXException, IOException
{
@@ -101,4 +122,4 @@
Document doc = docBuilder.parse(is);
return doc;
}
-}
+}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list