【问题标题】:How to manage Spring Getters and Setters Obfuscation in yguard如何在 yguard 中管理 Spring Getters 和 Setters 混淆
【发布时间】:2012-03-13 11:55:53
【问题描述】:

嗨,我使用 yguard ant 任务来混淆我的项目,它可以很好地重命名我的 java 类和 spring xml 文件中的相应 bean,但是由于 getter 和 setter 方法也在 java 中重命名,所以 spring 注入中的属性名称不匹配..所以我无法继续。谁能告诉我如何单独排除 setter 和 getter 的混淆?

【问题讨论】:

    标签: obfuscation proguard yguard


    【解决方案1】:

    YGuard 在这方面做得不是很好,但你为什么不试试 ProGaurd?

    您可以参考 ProGaurd 示例部分 (http://proguard.sourceforge.net/index.html#manual/examples.html),其中说:

    处理 bean 类

    如果您的应用程序、applet、servlet、库等广泛使用对 bean 类的自省来查找 bean 编辑器类或 getter 和 setter 方法,那么配置可能会变得很痛苦。除了确保 bean 类名称或 getter 和 setter 名称不会改变之外,您无能为力。例如:

    -keep public class mypackage.MyBean {
        public void setMyProperty(int);
        public int getMyProperty();
    }
    
    -keep public class mypackage.MyBeanEditor
    

    如果要显式列出的元素太多,类名和方法签名中的通配符可能会有所帮助。此示例应包含 mybeans 包中的类中所有可能的 setter 和 getter:

    -keep class mybeans.** {
        void set*(***);
        void set*(int, ***);
    
        boolean is*(); 
        boolean is*(int);
    
        *** get*();
        *** get*(int);
    }
    

    “***”通配符匹配任何类型(原始或非原始、数组或非数组)。带有“int”参数的方法匹配列表属性。

    如果您还在应用程序中使用注释:

    处理资源注入

    如果您的应用程序使用 Java EE 样式的资源注入,应用程序容器将自动将资源类的实例分配给使用 @Resource 注释的字段和方法。容器应用自省,甚至直接访问私有类成员。它通常根据类型名称和类成员名称构造资源名称。然后我们必须避免这些类成员被删除或重命名:

    -keepclassmembers class * {
        @javax.annotation.Resource *;
    }
    

    Spring框架还有另一个类似的注解@Autowired:

    -keepclassmembers class * {
        @org.springframework.beans.factory.annotation.Autowired *;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2020-08-22
      • 2021-04-16
      • 2010-09-14
      • 1970-01-01
      相关资源
      最近更新 更多