From 5bf8fd577cc8e3f1c4d1310a93157d71564f8f0d Mon Sep 17 00:00:00 2001 From: lanyi <1005197862@qq.com> Date: Sat, 24 Sep 2022 01:28:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E7=BB=93=E6=9E=9C=E6=96=B0?= =?UTF-8?q?=E5=A2=9Eidea=E8=A1=A8=E8=BE=BE=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../searcher/JavaObjectSearcher.java | 3 +- .../searcher/SearchRequstByBFS.java | 37 ++++++++------- .../searcher/SearchRequstByDFS.java | 3 +- .../tools/josearcher/utils/CommonUtil.java | 47 ++++++++++++++----- .../gv7/tools/josearcher/utils/Express.java | 21 +++++++++ 5 files changed, 81 insertions(+), 30 deletions(-) create mode 100644 src/main/java/me/gv7/tools/josearcher/utils/Express.java diff --git a/src/main/java/me/gv7/tools/josearcher/searcher/JavaObjectSearcher.java b/src/main/java/me/gv7/tools/josearcher/searcher/JavaObjectSearcher.java index a937e71..391aa1b 100644 --- a/src/main/java/me/gv7/tools/josearcher/searcher/JavaObjectSearcher.java +++ b/src/main/java/me/gv7/tools/josearcher/searcher/JavaObjectSearcher.java @@ -106,7 +106,8 @@ private void searchObject(String filed_name,Object filed_object,String log_chain // 搜索 if(!is_search_all){ if(MatchUtil.matchClassType(clazz.getName(),this.keys)){ - write2log(result_file,new_log_chain + "\n\n\n"); + write2log(result_file,new_log_chain + "\n"); + write2log(result_file, "idea_express: " + genExpress(new_log_chain) + "\n\n\n"); if(is_debug) { write2log(all_chain_file, new_log_chain + "\n\n\n"); } diff --git a/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByBFS.java b/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByBFS.java index 0c95156..5bd2582 100644 --- a/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByBFS.java +++ b/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByBFS.java @@ -9,8 +9,10 @@ import me.gv7.tools.josearcher.utils.CheckUtil; import me.gv7.tools.josearcher.utils.LogUtil; import me.gv7.tools.josearcher.utils.MatchUtil; + import java.lang.reflect.Field; import java.util.*; + import static me.gv7.tools.josearcher.utils.CommonUtil.*; import static me.gv7.tools.josearcher.utils.CommonUtil.write2log; import static me.gv7.tools.josearcher.utils.CheckUtil.isList; @@ -35,22 +37,22 @@ public class SearchRequstByBFS { private String err_log_file; - public SearchRequstByBFS(Object target, List keys){ + public SearchRequstByBFS(Object target, List keys) { this.target = target; this.keys = keys; //把当前的元素加入到队列尾 q.offer(new NodeT.Builder().setChain("").setField_name("TargetObject").setField_object(target).build()); } - public void initSavePath(){ - if(report_save_path == null){ - this.result_file = String.format("%s_result_%s.txt",model_name,getCurrentDate()); - this.all_chain_file = String.format("%s_log_%s.txt",model_name,getCurrentDate()); - this.err_log_file = String.format("%s_error_%s.txt",model_name,getCurrentDate()); - }else{ - this.result_file = String.format("%s/%s_result_%s.txt",report_save_path,model_name,getCurrentDate()); - this.all_chain_file = String.format("%s/%s_log_%s.txt",report_save_path,model_name,getCurrentDate()); - this.err_log_file = String.format("%s_error_%s.txt",report_save_path,model_name,getCurrentDate()); + public void initSavePath() { + if (report_save_path == null) { + this.result_file = String.format("%s_result_%s.txt", model_name, getCurrentDate()); + this.all_chain_file = String.format("%s_log_%s.txt", model_name, getCurrentDate()); + this.err_log_file = String.format("%s_error_%s.txt", model_name, getCurrentDate()); + } else { + this.result_file = String.format("%s/%s_result_%s.txt", report_save_path, model_name, getCurrentDate()); + this.all_chain_file = String.format("%s/%s_log_%s.txt", report_save_path, model_name, getCurrentDate()); + this.err_log_file = String.format("%s_error_%s.txt", report_save_path, model_name, getCurrentDate()); } } @@ -75,9 +77,9 @@ public void setErrLogFile(String err_log_file) { this.err_log_file = err_log_file; } - public void searchObject(){ + public void searchObject() { this.initSavePath(); - while(!q.isEmpty()){ + while (!q.isEmpty()) { NodeT node = q.poll(); String filed_name = node.getField_name(); Object filed_object = node.getField_object(); @@ -86,11 +88,11 @@ public void searchObject(){ int current_depth = node.getCurrent_depth(); //最多挖多深 - if(current_depth > max_search_depth){ + if (current_depth > max_search_depth) { continue; } - if (filed_object == null || CheckUtil.isSysType(filed_object) || MatchUtil.isInBlacklist(filed_name,filed_object,this.blacklists)){ + if (filed_object == null || CheckUtil.isSysType(filed_object) || MatchUtil.isInBlacklist(filed_name, filed_object, this.blacklists)) { //如果object是null/基本数据类型/包装类/日期类型,则不需要在递归调用 continue; } @@ -110,7 +112,8 @@ public void searchObject(){ // 搜索操作 if (MatchUtil.matchObject(filed_name, filed_object, keys)) { - write2log(result_file, new_log_chain + "\n\n\n"); + write2log(result_file, new_log_chain + "\n"); + write2log(result_file, "idea_express: " + genExpress(new_log_chain) + "\n\n\n"); } if (is_debug) { write2log(all_chain_file, new_log_chain + "\n\n\n"); @@ -263,8 +266,8 @@ public void searchObject(){ } } } - }catch (Throwable e){ - LogUtil.saveThrowableInfo(e,this.err_log_file); + } catch (Throwable e) { + LogUtil.saveThrowableInfo(e, this.err_log_file); } } } diff --git a/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByDFS.java b/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByDFS.java index 3c8f958..5060927 100644 --- a/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByDFS.java +++ b/src/main/java/me/gv7/tools/josearcher/searcher/SearchRequstByDFS.java @@ -261,7 +261,8 @@ private void searchObject(String filed_name,Object filed_object,String log_chain } if(MatchUtil.matchObject(filed_name,filed_object,keys)){ - write2log(result_file,new_log_chain + "\n\n\n"); + write2log(result_file,new_log_chain + "\n"); + write2log(result_file, "idea_express: " + genExpress(new_log_chain) + "\n\n\n"); } if(is_debug) { diff --git a/src/main/java/me/gv7/tools/josearcher/utils/CommonUtil.java b/src/main/java/me/gv7/tools/josearcher/utils/CommonUtil.java index 9212b67..b367993 100644 --- a/src/main/java/me/gv7/tools/josearcher/utils/CommonUtil.java +++ b/src/main/java/me/gv7/tools/josearcher/utils/CommonUtil.java @@ -6,23 +6,48 @@ import java.util.Date; public class CommonUtil { - public static String getBanner(){ + public static String getBanner() { String banner = "#############################################################\n" + - " Java Object Searcher v0.01\n" + - " author: c0ny1\n" + - " github: http://github.com/c0ny1/java-object-searcher\n" + - "#############################################################\n\n\n"; + " Java Object Searcher v0.01\n" + + " author: c0ny1\n" + + " github: http://github.com/c0ny1/java-object-searcher\n" + + "#############################################################\n\n\n"; return banner; } - public static void write2log(String filename,String content){ + public static String genExpress(String log) { + String[] logs = log.split("--->"); + + String idea_express = null; + for (int i = 0; i < logs.length; i++) { + if (i == 0) { + idea_express = new Express(logs[i]).getField(); + continue; + } + String express; + Express currentExpress = new Express(logs[i]); + Express previousExpress = new Express(logs[i - 1]); + express = String.format("%s.%s", idea_express, currentExpress.getField()); + if (previousExpress.getClassName().contains("[Ljava")) { + express = String.format("%s%s", idea_express, currentExpress.getField()); + } + if (previousExpress.getClassName().contains("Map")) { + express = String.format("%s.get(\"%s\")", idea_express, currentExpress.getField().replace("[", "").replace("]", "")); + } + idea_express = express; + } + return idea_express; + } + + + public static void write2log(String filename, String content) { try { File file = new File(filename); String new_content; if (!file.exists()) { file.createNewFile(); new_content = getBanner() + content; - }else{ + } else { new_content = content; } @@ -30,21 +55,21 @@ public static void write2log(String filename,String content){ FileWriter fileWritter = new FileWriter(file, true); fileWritter.write(new_content); fileWritter.close(); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } - public static String getBlank(int n){ + public static String getBlank(int n) { String strTab = ""; - for(int i=0;i