优化编译的安全检查

This commit is contained in:
18326186802 2021-07-23 14:40:48 +08:00
parent 671f3d4b73
commit fb41124eee
8 changed files with 183 additions and 252 deletions

View File

@ -134,10 +134,10 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<!-- <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependency>-->
</dependencies>
<repositories>
<repository>

View File

@ -21,13 +21,136 @@ import java.util.concurrent.ConcurrentHashMap;
public class XRepoManager {
private static final Logger log = LoggerFactory.getLogger(XRepoManager.class);
public static Map<String, Repository> repositoryCache = new HashMap();
public static Map<String, DatabaseMeta> databaseMeta = new ConcurrentHashMap();
public static Map<String, Repository> repositoryCache = new HashMap<String, Repository>();
public static Map<String, DatabaseMeta> databaseMeta = new ConcurrentHashMap<String, DatabaseMeta>();
public XRepoManager() {
}
public static List<RepositoryTree> getAllDirectoryTreeList(String repoId, Repository repository, String path, List<RepositoryTree> allRepositoryTreeList) throws KettleException {
List<RepositoryTree> repositoryTreeList = getJobAndTrans(repoId, repository, path);
if (repositoryTreeList.size() != 0) {
Iterator var5 = repositoryTreeList.iterator();
public static String[] getDataBaseAccess() {
while(var5.hasNext()) {
RepositoryTree repositoryTree = (RepositoryTree)var5.next();
if (!repositoryTree.isLasted()) {
getAllDirectoryTreeList(repoId, repository, repositoryTree.getPath(), allRepositoryTreeList);
allRepositoryTreeList.add(repositoryTree);
} else {
allRepositoryTreeList.add(repositoryTree);
}
}
}
return allRepositoryTreeList;
}
public static List<RepositoryTree> getJobAndTrans(String repoId, Repository repository, String path) throws KettleException {
RepositoryDirectoryInterface rDirectory = repository.loadRepositoryDirectoryTree().findDirectory(path);
List<RepositoryTree> repositoryTreeList = getDirectory(repoId, repository, rDirectory);
List<RepositoryElementMetaInterface> li = repository.getJobAndTransformationObjects(rDirectory.getObjectId(), false);
if (null != li) {
Iterator var6 = li.iterator();
while(var6.hasNext()) {
RepositoryElementMetaInterface repel = (RepositoryElementMetaInterface)var6.next();
RepositoryTree repositoryTree;
StringBuilder stringBuilder;
if ("job".equals(repel.getObjectType().toString())) {
repositoryTree = new RepositoryTree();
stringBuilder = new StringBuilder();
stringBuilder.append("job").append(rDirectory.getObjectId().toString()).append("@").append(repel.getObjectId().toString());
repositoryTree.setId(stringBuilder.toString());
repositoryTree.setParent(repoId + "@" + rDirectory.getObjectId().toString());
repositoryTree.setText(repel.getName());
if (repository instanceof KettleDatabaseRepository) {
repositoryTree.setType(repoId + "@db@" + "job");
} else if (repository instanceof KettleFileRepository) {
repositoryTree.setType(repoId + "@file@" + "job");
}
repositoryTree.setLasted(true);
repositoryTree.setPath(repel.getRepositoryDirectory().getPath());
repositoryTreeList.add(repositoryTree);
} else if ("transformation".equals(repel.getObjectType().toString())) {
repositoryTree = new RepositoryTree();
stringBuilder = new StringBuilder();
stringBuilder.append("transformation").append(rDirectory.getObjectId().toString()).append("@").append(repel.getObjectId().toString());
repositoryTree.setId(stringBuilder.toString());
repositoryTree.setParent(repoId + "@" + rDirectory.getObjectId().toString());
repositoryTree.setText(repel.getName());
if (repository instanceof KettleDatabaseRepository) {
repositoryTree.setType(repoId + "@db@" + "transformation");
} else if (repository instanceof KettleFileRepository) {
repositoryTree.setType(repoId + "@file@" + "transformation");
}
repositoryTree.setLasted(true);
repositoryTree.setPath(repel.getRepositoryDirectory().getPath());
repositoryTreeList.add(repositoryTree);
}
}
}
return repositoryTreeList;
}
private static List<RepositoryTree> getDirectory(String repoId, Repository repository, RepositoryDirectoryInterface rDirectory) throws KettleException {
List<RepositoryTree> repositoryTreeList = new ArrayList<RepositoryTree>();
if (null != repository && null != rDirectory) {
RepositoryDirectoryInterface tree = repository.loadRepositoryDirectoryTree().findDirectory(rDirectory.getObjectId());
if (rDirectory.getNrSubdirectories() > 0) {
for(int i = 0; i < rDirectory.getNrSubdirectories(); ++i) {
RepositoryDirectory subTree = tree.getSubdirectory(i);
RepositoryTree repositoryTree = new RepositoryTree();
repositoryTree.setId(repoId + "@" + subTree.getObjectId().toString());
repositoryTree.setParent(repoId + "@" + rDirectory.getObjectId().toString());
repositoryTree.setText(subTree.getName());
repositoryTree.setPath(subTree.getPath());
repositoryTree.setType("subTree");
List<RepositoryElementMetaInterface> RepositoryElementMetaInterfaceList = repository.getJobAndTransformationObjects(subTree.getObjectId(), false);
if (subTree.getNrSubdirectories() <= 0 && RepositoryElementMetaInterfaceList.size() <= 0) {
repositoryTree.setLasted(true);
} else {
repositoryTree.setLasted(false);
}
repositoryTreeList.add(repositoryTree);
}
}
}
return repositoryTreeList;
}
public static Repository createRep(BaseRepositoryMeta baseRepositoryMeta, String id) throws KettleException {
if (get(id) != null) {
return get(id);
} else {
Repository repo = null;
if (baseRepositoryMeta instanceof KettleDatabaseRepositoryMeta) {
repo = new KettleDatabaseRepository();
((Repository)repo).init((KettleDatabaseRepositoryMeta)baseRepositoryMeta);
} else {
repo = new KettleFileRepository();
((Repository)repo).init((KettleFileRepositoryMeta)baseRepositoryMeta);
}
repositoryCache.put(id, repo);
log.info(((Repository)repo).getName() + "资源库初始化成功");
return (Repository)repo;
}
}
public static Repository createFileRep(String repoId, String repName, String description, String baseDirectory) throws KettleException {
if (!KettleEnvironment.isInitialized()) {
KettleEnvironment.init();
}
KettleFileRepositoryMeta fileRepMeta = new KettleFileRepositoryMeta(repoId, repName, description, baseDirectory);
return createRep(fileRepMeta, repoId);
}
private static Repository get(String repoId) {
return (Repository)repositoryCache.get(repoId);
}
/* public static String[] getDataBaseAccess() {
String[] dataBaseAccess = DatabaseMeta.dbAccessTypeCode;
return dataBaseAccess;
}
@ -76,37 +199,9 @@ public class XRepoManager {
return dm;
}
private static Repository get(String repoId) {
return (Repository)repositoryCache.get(repoId);
}
public static Repository createRep(BaseRepositoryMeta baseRepositoryMeta, String id) throws KettleException {
if (get(id) != null) {
return get(id);
} else {
Repository repo = null;
if (baseRepositoryMeta instanceof KettleDatabaseRepositoryMeta) {
repo = new KettleDatabaseRepository();
((Repository)repo).init((KettleDatabaseRepositoryMeta)baseRepositoryMeta);
} else {
repo = new KettleFileRepository();
((Repository)repo).init((KettleFileRepositoryMeta)baseRepositoryMeta);
}
repositoryCache.put(id, repo);
log.info(((Repository)repo).getName() + "资源库初始化成功");
return (Repository)repo;
}
}
public static Repository createFileRep(String repoId, String repName, String description, String baseDirectory) throws KettleException {
if (!KettleEnvironment.isInitialized()) {
KettleEnvironment.init();
}
KettleFileRepositoryMeta fileRepMeta = new KettleFileRepositoryMeta(repoId, repName, description, baseDirectory);
return createRep(fileRepMeta, repoId);
}
public static Repository createDBRepByJndi(String repoId, String name, String type, String db) throws KettleException {
return createBaseMetaRep(repoId, (String)null, (String)null, (JSONObject)null, name, type, DatabaseMeta.dbAccessTypeCode[4], (String)null, db, (String)null, (String)null, (String)null);
@ -163,100 +258,9 @@ public class XRepoManager {
repositoryCache.clear();
}
public static List<RepositoryTree> getAllDirectoryTreeList(String repoId, Repository repository, String path, List<RepositoryTree> allRepositoryTreeList) throws KettleException {
List<RepositoryTree> repositoryTreeList = getJobAndTrans(repoId, repository, path);
if (repositoryTreeList.size() != 0) {
Iterator var5 = repositoryTreeList.iterator();
while(var5.hasNext()) {
RepositoryTree repositoryTree = (RepositoryTree)var5.next();
if (!repositoryTree.isLasted()) {
getAllDirectoryTreeList(repoId, repository, repositoryTree.getPath(), allRepositoryTreeList);
allRepositoryTreeList.add(repositoryTree);
} else {
allRepositoryTreeList.add(repositoryTree);
}
}
}
return allRepositoryTreeList;
}
public static List<RepositoryTree> getJobAndTrans(String repoId, Repository repository, String path) throws KettleException {
RepositoryDirectoryInterface rDirectory = repository.loadRepositoryDirectoryTree().findDirectory(path);
List<RepositoryTree> repositoryTreeList = getDirectory(repoId, repository, rDirectory);
List<RepositoryElementMetaInterface> li = repository.getJobAndTransformationObjects(rDirectory.getObjectId(), false);
if (null != li) {
Iterator var6 = li.iterator();
while(var6.hasNext()) {
RepositoryElementMetaInterface repel = (RepositoryElementMetaInterface)var6.next();
RepositoryTree repositoryTree;
StringBuilder stringBuilder;
if ("job".equals(repel.getObjectType().toString())) {
repositoryTree = new RepositoryTree();
stringBuilder = new StringBuilder();
stringBuilder.append("job").append(rDirectory.getObjectId().toString()).append("@").append(repel.getObjectId().toString());
repositoryTree.setId(stringBuilder.toString());
repositoryTree.setParent(repoId + "@" + rDirectory.getObjectId().toString());
repositoryTree.setText(repel.getName());
if (repository instanceof KettleDatabaseRepository) {
repositoryTree.setType(repoId + "@db@" + "job");
} else if (repository instanceof KettleFileRepository) {
repositoryTree.setType(repoId + "@file@" + "job");
}
repositoryTree.setLasted(true);
repositoryTree.setPath(repel.getRepositoryDirectory().getPath());
repositoryTreeList.add(repositoryTree);
} else if ("transformation".equals(repel.getObjectType().toString())) {
repositoryTree = new RepositoryTree();
stringBuilder = new StringBuilder();
stringBuilder.append("transformation").append(rDirectory.getObjectId().toString()).append("@").append(repel.getObjectId().toString());
repositoryTree.setId(stringBuilder.toString());
repositoryTree.setParent(repoId + "@" + rDirectory.getObjectId().toString());
repositoryTree.setText(repel.getName());
if (repository instanceof KettleDatabaseRepository) {
repositoryTree.setType(repoId + "@db@" + "transformation");
} else if (repository instanceof KettleFileRepository) {
repositoryTree.setType(repoId + "@file@" + "transformation");
}
repositoryTree.setLasted(true);
repositoryTree.setPath(repel.getRepositoryDirectory().getPath());
repositoryTreeList.add(repositoryTree);
}
}
}
return repositoryTreeList;
}
private static List<RepositoryTree> getDirectory(String repoId, Repository repository, RepositoryDirectoryInterface rDirectory) throws KettleException {
List<RepositoryTree> repositoryTreeList = new ArrayList();
if (null != repository && null != rDirectory) {
RepositoryDirectoryInterface tree = repository.loadRepositoryDirectoryTree().findDirectory(rDirectory.getObjectId());
if (rDirectory.getNrSubdirectories() > 0) {
for(int i = 0; i < rDirectory.getNrSubdirectories(); ++i) {
RepositoryDirectory subTree = tree.getSubdirectory(i);
RepositoryTree repositoryTree = new RepositoryTree();
repositoryTree.setId(repoId + "@" + subTree.getObjectId().toString());
repositoryTree.setParent(repoId + "@" + rDirectory.getObjectId().toString());
repositoryTree.setText(subTree.getName());
repositoryTree.setPath(subTree.getPath());
repositoryTree.setType("subTree");
List<RepositoryElementMetaInterface> RepositoryElementMetaInterfaceList = repository.getJobAndTransformationObjects(subTree.getObjectId(), false);
if (subTree.getNrSubdirectories() <= 0 && RepositoryElementMetaInterfaceList.size() <= 0) {
repositoryTree.setLasted(true);
} else {
repositoryTree.setLasted(false);
}
repositoryTreeList.add(repositoryTree);
}
}
}
return repositoryTreeList;
}
*/
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.kettle.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -56,8 +57,14 @@ public class KettleJobServiceImpl implements IKettleJobService
@Override
public List<KettleJob> selectKettleJobList(KettleJob kettleJob)
{
List<SysRole> roleList = (List<SysRole>) PermissionUtils.getPrincipalProperty("roles");
//当前用户的roleKey
Object o=PermissionUtils.getPrincipalProperty("roles");
List<SysRole> roleList=new ArrayList<>();
// roleList= (List<SysRole>) PermissionUtils.getPrincipalProperty("roles");
if(o != null && o instanceof List<?>){
for(Object r:(List<?>)o){
roleList.add(SysRole.class.cast(r));
}
} //当前用户的roleKey
List<String> roleKeys=roleList.stream().map(SysRole::getRoleKey).collect(Collectors.toList());
return kettleJobMapper.selectKettleJobList(kettleJob,roleKeys);
}

View File

@ -1,8 +1,7 @@
package com.ruoyi.kettle.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import com.ruoyi.common.core.domain.AjaxResult;
@ -13,11 +12,7 @@ import com.ruoyi.kettle.domain.XRepository;
import com.ruoyi.kettle.mapper.XRepositoryMapper;
import com.ruoyi.kettle.service.IKettleTransService;
import com.ruoyi.kettle.tools.KettleUtil;
import lombok.extern.slf4j.Slf4j;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.trans.Trans;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.ruoyi.kettle.mapper.KettleTransMapper;
import com.ruoyi.kettle.domain.KettleTrans;
@ -30,7 +25,6 @@ import com.ruoyi.common.core.text.Convert;
* @date 2021-07-14
*/
@Service("kettleTransServiceImpl")
@Slf4j
public class KettleTransServiceImpl implements IKettleTransService
{
@Autowired
@ -62,7 +56,15 @@ public class KettleTransServiceImpl implements IKettleTransService
@Override
public List<KettleTrans> selectKettleTransList(KettleTrans kettleTrans)
{
List<SysRole> roleList = (List<SysRole>) PermissionUtils.getPrincipalProperty("roles");
Object o=PermissionUtils.getPrincipalProperty("roles");
List<SysRole> roleList=new ArrayList<>();
// roleList= (List<SysRole>) PermissionUtils.getPrincipalProperty("roles");
if(o != null && o instanceof List<?>){
for(Object r:(List<?>)o){
roleList.add(SysRole.class.cast(r));
}
}
//当前用户的roleKey
List<String> roleKeys=roleList.stream().map(SysRole::getRoleKey).collect(Collectors.toList());

View File

@ -135,7 +135,7 @@ public class Constant extends Const {
}
public static Map<String, String> getQuartzBasic(String name, String path) {
Map<String, String> quartzBasic = new HashMap();
Map<String, String> quartzBasic = new HashMap<String, String>();
StringBuilder jobName = new StringBuilder();
jobName.append("JOB").append("@").append(name).append("@").append(path);
StringBuilder jobGroupName = new StringBuilder();

View File

@ -1,6 +1,6 @@
package com.ruoyi.kettle.tools;
import lombok.extern.slf4j.Slf4j;
import com.ruoyi.common.config.datasource.DynamicDataSourceContextHolder;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
@ -15,14 +15,16 @@ import org.pentaho.di.repository.filerep.KettleFileRepository;
import org.pentaho.di.repository.filerep.KettleFileRepositoryMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import java.util.Iterator;
import java.util.Map;
@Slf4j
@Component
public class KettleUtil {
public static final Logger log = LoggerFactory.getLogger(KettleUtil.class);
public String KETTLE_LOG_LEVEL = "basic";

View File

@ -58,7 +58,7 @@ import java.util.concurrent.ConcurrentHashMap;
public class KettleUtil_2 {
private static final Logger log = LoggerFactory.getLogger(KettleUtil_2.class);
public static Map<String, Repository> holder = new ConcurrentHashMap();
public static Map<String, Repository> holder = new ConcurrentHashMap<String, Repository>();
public static Map<String, Repository> getHolder() {
return holder;
@ -70,8 +70,34 @@ public class KettleUtil_2 {
public KettleUtil_2() {
}
public static Repository conFileRep(String repoId, String repoName, String baseDirectory) throws KettleException {
if (holder.containsKey(repoId)) {
return (Repository)holder.get(repoId);
} else {
XRepoManager.createFileRep(repoId, repoName, "文件资源库", baseDirectory);
Repository repository = connect(repoId);
if (null != repository) {
holder.put(repoId, repository);
return repository;
} else {
return null;
}
}
}
public static Repository connect(String repoId) throws KettleSecurityException, KettleException {
return connect(repoId, (String)null, (String)null);
}
public static Repository conByJndi(String repoId, String name, String db, String type, String kuser, String kpass) throws Exception {
public static Repository connect(String repoId, String username, String password) throws KettleSecurityException, KettleException {
Repository repository = (Repository)XRepoManager.repositoryCache.get(repoId);
if (!repository.isConnected()) {
repository.connect(username, password);
log.info(repository.getName() + "资源库已连接!");
}
return repository;
}
/*public static Repository conByJndi(String repoId, String name, String db, String type, String kuser, String kpass) throws Exception {
testConnect(repoId);
if (holder.containsKey(repoId)) {
return (Repository)holder.get(repoId);
@ -87,20 +113,7 @@ public class KettleUtil_2 {
}
}
public static Repository conFileRep(String repoId, String repoName, String baseDirectory) throws KettleException {
if (holder.containsKey(repoId)) {
return (Repository)holder.get(repoId);
} else {
XRepoManager.createFileRep(repoId, repoName, "文件资源库", baseDirectory);
Repository repository = connect(repoId);
if (null != repository) {
holder.put(repoId, repository);
return repository;
} else {
return null;
}
}
}
public static Repository conByNative(String repoId, String repoName, String name, String type, String host, String port, String db, String user, String pass, String kuser, String kpass) throws KettleException {
testConnect(repoId);
@ -142,19 +155,7 @@ public class KettleUtil_2 {
}
}
public static Repository connect(String repoId) throws KettleSecurityException, KettleException {
return connect(repoId, (String)null, (String)null);
}
public static Repository connect(String repoId, String username, String password) throws KettleSecurityException, KettleException {
Repository repository = (Repository)XRepoManager.repositoryCache.get(repoId);
if (!repository.isConnected()) {
repository.connect(username, password);
log.info(repository.getName() + "资源库已连接!");
}
return repository;
}
public static void setRepository(Repository repository) {
}
@ -731,5 +732,5 @@ public class KettleUtil_2 {
}
}
}
}*/
}

View File

@ -1,85 +0,0 @@
package com.ruoyi.kettle.tools;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Iterator;
import java.util.Map;
@Component
public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware {
private static ConfigurableListableBeanFactory beanFactory;
private static ApplicationContext context = null;
private SpringContextUtil() {
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static <T> T getBean(String beanName) {
return (T) beanFactory.getBean(beanName);
}
public static <T> T getBean(String beanName, Class<T> clazz) {
return beanFactory.getBean(beanName, clazz);
}
public static <T> T getBean(Class<T> clazz) {
T t = null;
Map<String, T> map = beanFactory.getBeansOfType(clazz);
Map.Entry entry;
for(Iterator var3 = map.entrySet().iterator(); var3.hasNext();
t = (T) entry.getValue()) {
entry = (Map.Entry)var3.next();
}
return t;
}
public static boolean containsBean(String beanName) {
return beanFactory.containsBean(beanName);
}
public static boolean isSingleton(String beanName) {
return beanFactory.isSingleton(beanName);
}
public static Class getType(String beanName) {
return beanFactory.getType(beanName);
}
public static HttpServletResponse getResponse() {
return getServletRequestAttributes().getResponse();
}
public static HttpServletRequest getRequest() {
return getServletRequestAttributes().getRequest();
}
public static ServletRequestAttributes getServletRequestAttributes() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
return (ServletRequestAttributes)requestAttributes;
}
public static HttpSession getSession() {
return getRequest().getSession();
}
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
beanFactory = configurableListableBeanFactory;
}
}