跳到主要内容

ranger插件的初始化

随手记录, 主要都是在配置文件里写好类名, 然后classFor读取记载.

ranger init chained plugin

利用classLoader, 实例化配置里的插件.


public class RangerBasePlugin {

this.chainedPlugins = initChainedPlugins();

private List<RangerChainedPlugin> initChainedPlugins() {
List<RangerChainedPlugin> ret = new ArrayList<>();
String chainedServicePropPrefix = pluginConfig.getPropertyPrefix() + ".chained.services";

for (String chainedService : StringUtil.toList(pluginConfig.get(chainedServicePropPrefix))) {
if (StringUtils.isBlank(chainedService)) {
continue;
}

String className = pluginConfig.get(chainedServicePropPrefix + "." + chainedService + ".impl");

if (StringUtils.isBlank(className)) {
LOG.error("Ignoring chained service " + chainedService + ": no impl class specified");

continue;
}

try {
@SuppressWarnings("unchecked")
Class<RangerChainedPlugin> pluginClass = (Class<RangerChainedPlugin>) Class.forName(className);
RangerChainedPlugin chainedPlugin = pluginClass.getConstructor(RangerBasePlugin.class, String.class).newInstance(this, chainedService);

ret.add(chainedPlugin);
} catch (Throwable t) {
LOG.error("initChainedPlugins(): error instantiating plugin impl " + className, t);
}
}

return ret;
}
}

audit provider

audit provider 插件, 也是靠配置里名称进行实例化

package org.apache.ranger.audit.provider;


private AuditHandler getProviderFromConfig(Properties props,
String propPrefix, String providerName, AuditHandler consumer) {
AuditHandler provider = null;
String className = MiscUtil.getStringProperty(props, propPrefix + "."
+ BaseAuditHandler.PROP_CLASS_NAME);
if (className != null && !className.isEmpty()) {
try {
Class<?> handlerClass = Class.forName(className);
if (handlerClass.isAssignableFrom(AuditQueue.class)) {
// Queue class needs consumer
handlerClass.getDeclaredConstructor(AuditHandler.class)
.newInstance(consumer);
} else {
provider = (AuditHandler) Class.forName(className)
.newInstance();
}
} catch (Exception e) {
LOG.error("Can't instantiate audit class for providerName="
+ providerName + ", className=" + className
+ ", propertyPrefix=" + propPrefix, e);
}
}
}