[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