美文网首页
Proguard在Spring架构后端应用

Proguard在Spring架构后端应用

作者: Saxon_323e | 来源:发表于2018-11-16 16:17 被阅读0次

            网上大多能找到的关于Proguard资料非常多,但大多都是用于Android项目加固,对于后端Spring架构实用能搭成功的确非常少,本文就笔者亲测可用的springcloud环境下开发后端sdk使用Proguard过程做下笔记,不啰嗦,直接上Code。

    一、pom.xml配置

    <!-- ProGuard混淆插件 --><plugin>

    <groupId>com.github.wvengen</groupId>

    <artifactId>proguard-maven-plugin</artifactId>

    <version>2.0.11</version>

    <executions>

    <execution> 

    <phase>package</phase><!-- 混淆时刻,这里是打包的时候混淆 -->

    <goals>

    <goal>proguard</goal> <!-- 使用插件的什么功能,当然是混淆 -->

    </goals>

    </execution>

    </executions>

    <configuration>

    <attach>true</attach> <!-- 是否将生成的PG文件安装部署 --> 

    <obfuscate>true</obfuscate> <!-- 是否混淆 -->   <attachArtifactClassifier>pg</attachArtifactClassifier><!-- 指定生成文件分类 --> 

    <options>

    <option>-target 1.8</option><!-- JDK目标版本1.8 -->

    <option>-dontshrink</option><!-- 不做收缩(删除注释、未被引用代码) -->

    <option>-dontoptimize</option><!-- 不做优化(变更代码实现逻辑) -->

    <option>-dontskipnonpubliclibraryclasses</option><!-- 不路过非公用类文件及成员 -->

    <option>-dontskipnonpubliclibraryclassmembers</option>

    <option>-allowaccessmodification</option><!-- 优化时允许访问并修改有修饰符的类和类的成员 -->

    <option>-useuniqueclassmembernames</option><!-- 确定统一的混淆类的成员名称来增加混淆 -->

    <!-- 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有大量固定写法的包名 -->

    <option>-keeppackagenames</option>

    <!-- [*** 非常重要,不加生成jar的目录结构spring将扫描不到(同时被spring的@Configuration注解的类不能混淆, 原因未知 ???) ***] -->

    <option>-keepdirectories</option>

    <!-- 不混淆所有特殊的类 -->

    <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>

    <!-- 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射 -->

    <option>-keepclassmembers public class * {void set*(***);*** get*();}</option>

    <!-- 不混淆的包下的类名、或方法配置 -->

    <option>-keep class com.wl4g.devops.scm.client.config.*Configuration { *; }</option>

    <option>-keep class com.wl4g.devops.scm.client.configure.RefreshBean { *; }</option>

    <option>-keep class com.wl4g.devops.scm.client.configure.BeanCurrentlyConfigureAspect { *; }</option>

    <option>-keep class com.wl4g.devops.scm.client.indicator.** { *; }</option> <option>-keep class com.wl4g.devops.scm.client.metrics.** { *; }</option>

    <option>-keep class com.wl4g.devops.scm.client.store.** { *; }</option>

    <option>-keep class com.wl4g.devops.scm.client.utils.** { *; }</option>

    </options> <outjar>${project.artifactId}-${project.version}-pg.jar</outjar>

    <!-- 添加依赖,可以按你的需要修改,这里测试只需要一个JRE的Runtime包就行了 -->

    <libs>

    <lib>${java.home}/lib/rt.jar</lib>

    </libs>

    <addMavenDescriptor>true</addMavenDescriptor> <!-- 不添加则不会将pom.xml打包进去 --> 

    <!-- 加载文件的过滤器,就是你的工程目录了 -->

    <!-- <inFilter>com/wl4g/devops/scm/client/**</inFilter> -->

    <!-- 对什么东西进行加载,这里仅有classes成功,毕竟你也不可能对配置文件及JSP混淆吧 --> <injar>classes</injar>

    <outputDirectory>${project.build.directory}</outputDirectory>

    </configuration><!-- 输出目录 -->

    </plugin>


    二、FQA

    1.  Proguard混淆代码导致Spring自动装配失败?

    举例说明:

    这是没加“-keepdirectories”的解压输出

    inflated: META-INF/MANIFEST.MF

    inflated: abc/service/Service.class

    inflated: test/rest/controller/Controller.class

    inflated: test/rest/controller/ServiceImpl.class

    inflated: META-INF/maven/test/rest/pom.xml

    inflated: META-INF/maven/test/rest/pom.properties

    2.加上“-keepdirectories”之后解压输出

    created: META-INF/inflated: META-INF/MANIFEST.MF

    created: abc/created: abc/service/

    created: test/

    created: test/rest/

    created: test/rest/controller/

    inflated: abc/service/Service.class

    inflated: test/rest/controller/Controller.class

    inflated: test/rest/controller/ServiceImpl.class

    created: META-INF/maven/

    created: META-INF/maven/test/

    created: META-INF/maven/test/rest/

    inflated: META-INF/maven/test/rest/pom.xml

    inflated: META-INF/maven/test/rest/pom.properties

    2. 执行clean install -DskipTests打包后解压jar包无maven的pom.xml文件?

    增加如下配置:

    <addMavenDescriptor>true</addMavenDescriptor>

    相关文章

      网友评论

          本文标题:Proguard在Spring架构后端应用

          本文链接:https://www.haomeiwen.com/subject/hgvmfqtx.html