[jboss-cvs] Picketbox SVN: r521 - in trunk: security-spi/spi/src/main/java/org/jboss/security/vault and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Mar 14 10:25:32 EDT 2014


Author: pskopek at redhat.com
Date: 2014-03-14 10:25:32 -0400 (Fri, 14 Mar 2014)
New Revision: 521

Modified:
   trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/security/vault/SecurityVaultUnitTestCase.java
   trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityActions.java
   trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityVaultFactory.java
Log:
[SECURITY-805] Overload SecurityVaultFactory.get() to be able to specify the classloader

Modified: trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/security/vault/SecurityVaultUnitTestCase.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/security/vault/SecurityVaultUnitTestCase.java	2014-03-06 22:43:38 UTC (rev 520)
+++ trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/security/vault/SecurityVaultUnitTestCase.java	2014-03-14 14:25:32 UTC (rev 521)
@@ -36,10 +36,12 @@
 import javax.crypto.SecretKeyFactory;
 import javax.crypto.spec.PBEKeySpec;
 import javax.crypto.spec.PBEParameterSpec;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.nio.channels.FileChannel;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -69,6 +71,31 @@
       assertTrue(vault instanceof PicketBoxSecurityVault);
       assertFalse(vault.isInitialized());
    }
+
+   @Test
+   public void testClassLoaderVault() throws Exception
+   {
+      //Back up the existing vault and reset it
+      Field field = SecurityVaultFactory.class.getDeclaredField("vault");
+      field.setAccessible(true);
+      Object existingVault = field.get(null);
+      try
+      {
+         field.set(null, null);
+         ClassLoader cl = SecurityVaultFactory.class.getClassLoader();
+         SecurityVault vault = SecurityVaultFactory.get(cl, TestVault.class.getName());
+         assertNotNull(vault);
+         assertTrue(vault instanceof TestVault);
+         assertFalse(vault.isInitialized());
+      }
+      finally
+      {
+         if (existingVault != null)
+         {
+            field.set(null, existingVault);
+         }
+      }
+   }
    
    @Test
    public void testHandshake() throws Exception

Modified: trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityActions.java
===================================================================
--- trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityActions.java	2014-03-06 22:43:38 UTC (rev 520)
+++ trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityActions.java	2014-03-14 14:25:32 UTC (rev 521)
@@ -2,7 +2,7 @@
  * JBoss, Home of Professional Open Source.
  * Copyright 2008, Red Hat Middleware LLC, and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors. 
+ * distribution for a full listing of individual contributors.
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
@@ -44,7 +44,7 @@
                loadedClass = cl.loadClass(fqn);
             }
             catch (ClassNotFoundException e)
-            { 
+            {
             }
             if(loadedClass == null)
             {
@@ -53,12 +53,41 @@
                   loadedClass = Thread.currentThread().getContextClassLoader().loadClass(fqn);
                }
                catch (ClassNotFoundException e)
-               {   
-               } 
+               {
+               }
             }
             return loadedClass;
          }
       });
-      
+
    }
+
+   static Class<?> loadClass(final ClassLoader classLoader, final String fqn)
+   {
+      return AccessController.doPrivileged(new PrivilegedAction<Class<?>>()
+      {
+         public Class<?> run()
+         {
+            Class<?> loadedClass = null;
+            try
+            {
+               loadedClass = classLoader.loadClass(fqn);
+            }
+            catch (ClassNotFoundException e)
+            {
+            }
+            if(loadedClass == null)
+            {
+               try
+               {
+                  loadedClass = Thread.currentThread().getContextClassLoader().loadClass(fqn);
+               }
+               catch (ClassNotFoundException e)
+               {
+               }
+            }
+            return loadedClass;
+         }
+      });
+   }
 }
\ No newline at end of file

Modified: trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityVaultFactory.java
===================================================================
--- trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityVaultFactory.java	2014-03-06 22:43:38 UTC (rev 520)
+++ trunk/security-spi/spi/src/main/java/org/jboss/security/vault/SecurityVaultFactory.java	2014-03-14 14:25:32 UTC (rev 521)
@@ -2,7 +2,7 @@
  * JBoss, Home of Professional Open Source.
  * Copyright 2008, Red Hat Middleware LLC, and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors. 
+ * distribution for a full listing of individual contributors.
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
@@ -32,7 +32,7 @@
 {
    private static String defaultVault = "org.picketbox.plugins.vault.PicketBoxSecurityVault";
    private static SecurityVault vault= null;
-   
+
    /**
     * Get an instance of {@link SecurityVault}
     * Remember to initialize the vault by checking {@link SecurityVault#isInitialized()}
@@ -43,7 +43,7 @@
    {
       return get(defaultVault);
    }
-   
+
    /**
     * Get an instance of {@link SecurityVault}
     * Remember to initialize the vault by checking {@link SecurityVault#isInitialized()}
@@ -59,7 +59,7 @@
       }
       if(fqn == null)
          return get();
-      
+
       if(vault == null)
       {
          Class<?> vaultClass = SecurityActions.loadClass(SecurityVaultFactory.class,fqn);
@@ -76,4 +76,38 @@
       }
       return vault;
    }
+
+   /**
+    * Get an instance of {@link SecurityVault}
+    * Remember to initialize the vault by checking {@link SecurityVault#isInitialized()}
+    * @param classLoader the class loader to use loading the vault
+    * @param fqn fully qualified name of the vault implementation
+    * @return an instance of {@link SecurityVault}
+    * @throws SecurityVaultException
+    */
+   public static SecurityVault get(ClassLoader classLoader, String fqn) throws SecurityVaultException
+   {
+	      SecurityManager sm = System.getSecurityManager();
+	      if (sm != null) {
+	         sm.checkPermission(new RuntimePermission(SecurityVaultFactory.class.getName() + ".get"));
+	      }
+	      if(fqn == null)
+	         return get();
+
+	      if(vault == null)
+	      {
+	         Class<?> vaultClass = SecurityActions.loadClass(classLoader,fqn);
+	         if(vaultClass == null)
+	            throw new SecurityVaultException(PicketBoxMessages.MESSAGES.unableToLoadVaultMessage());
+	         try
+	         {
+	            vault = (SecurityVault) vaultClass.newInstance();
+	         }
+	         catch (Exception e)
+	         {
+	            throw new SecurityVaultException(PicketBoxMessages.MESSAGES.unableToCreateVaultMessage(), e);
+	         }
+	      }
+	      return vault;
+	   }
 }
\ No newline at end of file



More information about the jboss-cvs-commits mailing list