use of io.cdap.cdap.security.spi.authorization.AuthorizationContext in project cdap by caskdata.
the class AccessControllerInstantiator method createAccessController.
/**
* Creates a new instance of the configured {@link AccessController} extension, based on the provided extension jar
* file and initialize it.
*
* @return a new instance of the configured {@link AccessController} extension
*/
private AccessController createAccessController(AccessControllerClassLoader classLoader) throws InvalidAccessControllerException {
Class<?> accessControllerClass = loadAccessControllerClass(classLoader);
// Set the context class loader to the AccessControllerClassLoader before creating a new instance of the extension,
// so all classes required in this process are created from the AccessControllerClassLoader.
ClassLoader oldClassLoader = ClassLoaders.setContextClassLoader(classLoader);
LOG.trace("Setting context classloader to {}. Old classloader was {}.", classLoader, oldClassLoader);
try {
AccessController accessController;
try {
Object extensionClass = instantiatorFactory.get(TypeToken.of(accessControllerClass)).create();
if (extensionClass instanceof AccessController) {
accessController = (AccessController) extensionClass;
} else {
accessController = new AuthorizerWrapper((Authorizer) extensionClass);
}
} catch (Exception e) {
throw new InvalidAccessControllerException(String.format("Error while instantiating for access controller extension %s. " + "Please make sure that the extension " + "is a public class with a default constructor.", accessControllerClass.getName()), e);
}
AuthorizationContext context = authorizationContextFactory.create(createExtensionProperties());
try {
accessController.initialize(context);
} catch (Exception e) {
throw new InvalidAccessControllerException(String.format("Error while initializing access control extension %s.", accessControllerClass.getName()), e);
}
return accessController;
} finally {
// After the process of creation of a new instance has completed (success or failure), reset the context
// classloader back to the original class loader.
ClassLoaders.setContextClassLoader(oldClassLoader);
LOG.trace("Resetting context classloader to {} from {}.", oldClassLoader, classLoader);
}
}
Aggregations