Browse Source

清空注解支持

JustryDeng 3 năm trước cách đây
mục cha
commit
23c3baa913

+ 2 - 2
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/Forward.java

@@ -24,8 +24,8 @@ public class Forward {
     public static void main(String[] args) {
         /// main test
         ///args =new String[]{
-        ///        "originJarOrWar=D:\\working\\demo\\target\\demo-1.0.0.jar",
-        ///        "includePrefix=com.ideaaedi"
+        ///        "originJarOrWar=D:/working/class-winter/class-winter-core/target/test-classes/boot-jar-encrypted.jar",
+        ///        "includePrefix=com?cca=true&cma=true&koa=false&cfa=true,com.ideaaedi,com.ideaaedi.demo"
         ///};
         // 解析参数
         String originJarOrWar = parseValueByPrefixFromTail("originJarOrWar=", args);

+ 3 - 2
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/executor/DecryptExecutor.java

@@ -33,13 +33,14 @@ import java.util.zip.ZipFile;
 public class DecryptExecutor {
     
     /** key- projectPath; value-要解密的文件清单,记录已加密的class的全类名的清单文件 */
-    private static Map<String, Set<String>> checklist = new ConcurrentHashMap<>(8);
+    private static final Map<String, Set<String>> checklist = new ConcurrentHashMap<>(8);
     
     /**
      * 以key-value的形式记录lib中的被混淆的类(key-被混淆的类的无后缀全类名, value-存放采集到的类所在lib的信息的文件夹)
-     *
+     * <pre>
      * key   - 形如: com.abc.xyz.Qwer
      * value - 形如: META-INF/winter/abc-1.0.0_jar/
+     * </pre>
      */
     private static Map<String, String> checklistOfAllLibsMap;
 

+ 2 - 3
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/executor/EncryptExecutor.java

@@ -961,8 +961,7 @@ public class EncryptExecutor {
                                 return EncryptClassArgs.create(file,
                                         StrUtil.isTrueDefault(params.get(Constant.CLEAN_CLASS_ANNOTATION_PARAM_NAME), false),
                                         StrUtil.isTrueDefault(params.get(Constant.CLEAN_METHOD_ANNOTATION_PARAM_NAME), false),
-                                        StrUtil.isTrueDefault(params.get(Constant.CLEAN_FIELD_ANNOTATION_PARAM_NAME), false),
-                                        StrUtil.isTrueDefault(params.get(Constant.KEEP_ORIGIN_ARGS_NAME_PARAM_NAME), true)
+                                        StrUtil.isTrueDefault(params.get(Constant.CLEAN_FIELD_ANNOTATION_PARAM_NAME), false)
                                 );
                             }
                         }
@@ -1001,7 +1000,7 @@ public class EncryptExecutor {
                 continue;
             }
             String key = keyValue.substring(0, equalIndex).trim();
-            String value = keyValue.substring(0, equalIndex).trim();
+            String value = keyValue.substring(equalIndex + 1).trim();
             if (StrUtil.isBlank(key) || StrUtil.isBlank(value)) {
                 continue;
             }

+ 0 - 7
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/Constant.java

@@ -255,11 +255,4 @@ public interface Constant {
      * {@link EncryptClassArgs#isCleanAnnotationOverField()}
      */
     String CLEAN_FIELD_ANNOTATION_PARAM_NAME = "cfa";
-    
-    /**
-     * 参数名:是否保留原方法的参数名. 值应为boolean类型
-     * <p>
-     * {@link EncryptClassArgs#isKeepOriginArgsName()}
-     */
-    String KEEP_ORIGIN_ARGS_NAME_PARAM_NAME = "koa";
 }

+ 1 - 3
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/EncryptClassArgs.java

@@ -41,15 +41,13 @@ public class EncryptClassArgs {
      * fast create
      */
     public static EncryptClassArgs create(File encryptClassFile, boolean cleanAnnotationOverClazz,
-                                          boolean cleanAnnotationOverMethod, boolean cleanAnnotationOverField,
-                                          boolean keepOriginArgsName) {
+                                          boolean cleanAnnotationOverMethod, boolean cleanAnnotationOverField) {
         Objects.requireNonNull(encryptClassFile, "encryptClassFile cannot be null.");
         EncryptClassArgs encryptClassArgs = new EncryptClassArgs();
         encryptClassArgs.setEncryptClassFile(encryptClassFile);
         encryptClassArgs.setCleanAnnotationOverClazz(cleanAnnotationOverClazz);
         encryptClassArgs.setCleanAnnotationOverMethod(cleanAnnotationOverMethod);
         encryptClassArgs.setCleanAnnotationOverField(cleanAnnotationOverField);
-        encryptClassArgs.setKeepOriginArgsName(keepOriginArgsName);
         return encryptClassArgs;
     }
     

+ 1 - 1
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AllTest.java

@@ -68,7 +68,7 @@ public class AllTest {
         // 加密
         String projectRootDir = PathUtil.getProjectRootDir(AllTest.class);
         String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-have-pwd.jar";
-        String includePrefix = "com.szlaozicl,com.aspire.ssm,org.springframework.aop.target.dynamic,com.fasterxml.jackson";
+        String includePrefix = "com.szlaozicl?cca=true&cfa=true,com.aspire.ssm,org.springframework.aop.target.dynamic,com.fasterxml.jackson";
         String excludePrefix = "com.aspire.ssm.config,com.aspire.ssm.util.Person";
         String finalName = "jd";
         String password = "pwd12345";

+ 88 - 0
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/EncryptArgParam_Test.java

@@ -0,0 +1,88 @@
+package winter.com.ideaaedi.classwinter;
+
+import winter.com.ideaaedi.classwinter.author.JustryDeng;
+import winter.com.ideaaedi.classwinter.util.BashUtil;
+import winter.com.ideaaedi.classwinter.util.Constant;
+import winter.com.ideaaedi.classwinter.util.PathUtil;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 测试加密参数
+ * <p>
+ *     注:在includePrefix后面允许设置加密参数(方式同在url后加参数一样,只是不需要urlEncoding)
+ *
+ * @author {@link JustryDeng}
+ * @since 2021/6/12 14:34:45
+ */
+public class EncryptArgParam_Test {
+    
+    public static void main(String[] args) {
+//        // 测试1: 无参数(默认参数)测试
+//        Map<String, String> argMap = new HashMap<>();
+//        have(argMap);
+    
+//        // 测试2: 有参数测试
+//        Map<String, String> argMap = new HashMap<>();
+//        argMap.put(Constant.CLEAN_CLASS_ANNOTATION_PARAM_NAME, "true");  // 默认为false
+//        argMap.put(Constant.CLEAN_METHOD_ANNOTATION_PARAM_NAME, "true");  // 默认为false
+//        argMap.put(Constant.CLEAN_FIELD_ANNOTATION_PARAM_NAME, "true"); // 默认为false
+//        have(argMap);
+    
+//        // 测试3: 有参数测试
+//        Map<String, String> argMap = new HashMap<>();
+//        argMap.put(Constant.CLEAN_CLASS_ANNOTATION_PARAM_NAME, "false");  // 默认为false
+//        argMap.put(Constant.CLEAN_METHOD_ANNOTATION_PARAM_NAME, "true");  // 默认为false
+//        argMap.put(Constant.CLEAN_FIELD_ANNOTATION_PARAM_NAME, "false"); // 默认为false
+//        have(argMap);
+    
+        // 测试4: 有参数测试
+        Map<String, String> argMap = new HashMap<>();
+        argMap.put(Constant.CLEAN_CLASS_ANNOTATION_PARAM_NAME, "true");  // 默认为false
+        argMap.put(Constant.CLEAN_METHOD_ANNOTATION_PARAM_NAME, "false");  // 默认为false
+        argMap.put(Constant.CLEAN_FIELD_ANNOTATION_PARAM_NAME, "true"); // 默认为false
+        have(argMap);
+    }
+    
+    /**
+     * jar测试 - 失败测试
+     */
+    public static void have(Map<String, String> argMap) {
+        // 杀下进程(以保证端口没有被占用)
+        BashUtil.killProcessByPorts("8080");
+        
+        String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
+        String originJarOrWar = projectRootDir + "boot-jar.jar";
+        String includePrefix = "com";
+        
+        // 在includePrefix后面组装参数(和在url后面增加参数一样)
+        if (argMap != null && argMap.size() > 0) {
+            StringBuilder sb = new StringBuilder(includePrefix);
+            sb.append("?");
+            argMap.forEach((key, value) -> {
+                sb.append(key).append("=").append(value).append("&");
+            });
+            sb.replace(sb.length() - 1, sb.length(), "");
+            includePrefix= sb.toString();
+        }
+        
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+                + " originJarOrWar=" + originJarOrWar
+                + " includePrefix=" + includePrefix
+                + " debug=true"
+                ;
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
+    
+    
+        String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
+    
+        // 解密
+        String javaagentArgs = "";
+        // String javaagentArgs = "=debug=true";
+        // String javaagentArgs = "=debug=true,password=xxx";
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s=debug=true -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+    }
+    
+}

BIN
class-winter-core/src/test/resources/class-winter-core-2.8.0.jar