package com.alibaba.doris.dataserver.core;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.doris.dataserver.config.data.FilterConfigure;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class RequestFilterChainFactory {
public RequestFilterChainFactory() {
filterChian = new DefaultRequestFilterChian();
}
public void loadRequestFiltersFromConfigure(List<FilterConfigure> filterConfigList) {
for (FilterConfigure filterConfig : filterConfigList) {
RequestFilter filter = createFilter(filterConfig);
filterChian.addFilter(filter);
}
}
private RequestFilter createFilter(FilterConfigure filterConfigList) {
String filterClassName = filterConfigList.getClassName();
RequestFilter filter = null;
try {
if (StringUtils.isNotBlank(filterClassName)) {
ClassLoader classLoader = this.getClass().getClassLoader();
Class<?> clazz = classLoader.loadClass(filterClassName);
filter = (RequestFilter) clazz.newInstance();
}
} catch (Exception e) {
logger.error("Create filter failed! The reason is :" + e.getMessage(), e);
}
return filter;
}
public RequestFilterChian getFilterChian() {
return filterChian;
}
private RequestFilterChian filterChian;
private static final Logger logger = LoggerFactory.getLogger(RequestFilterChainFactory.class);
}