springboot代码混淆

        主要就是在pom的build里添加proguard插件,如下(注意,我建议用6.0.2的proguard版本,不然混淆springboot2.X的时候会报错Can't process class [META-INF/versions/9/org/apache/logging/log4j/util/ProcessIdUtil.class,因为springboot2.X引用的log4j模块里有jdk9的支持,但是proguard6之前不支持):

<build>
        <finalName>monitor-1.2.0-SNAPSHOT</finalName>
        <plugins>
            <!-- <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin> -->
            
            
            <plugin>
                <groupId>com.github.wvengen</groupId>
	            <artifactId>proguard-maven-plugin</artifactId>
	            <executions>
	                <execution>
	                    <phase>package</phase>
	                    <goals><goal>proguard</goal></goals>
	                </execution>
	            </executions>
	            <configuration>
	            	<proguardVersion>6.0.2</proguardVersion>
	            	<injar>${project.build.finalName}.jar</injar>
                    <outjar>${project.build.finalName}.jar</outjar>
                    <obfuscate>true</obfuscate>
                    <proguardInclude>./proguard.cfg</proguardInclude>
                    
                    
                    <options>
                    	<!-- 不做收缩(删除注释、未被引用代码)-->
                        <option>-dontshrink</option>
                        
                        <!-- 不做优化(变更代码实现逻辑)-->
                        <option>-dontoptimize</option>
                        
                        <option>-adaptclassstrings</option>
                        
                        <!-- 不混淆所有特殊的类-->
                        <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
                            SourceFile,LineNumberTable,*Annotation*,EnclosingMethod</option>
                        
                        <option>-keepnames interface **</option>
                        
                        <option>-keepparameternames</option>
                        
                        <option>-keep class !cn.com.geovis.monitor.controller.LoginController { *; }</option>
                        
                        
                        <option>-keep interface * extends * { *; }</option>
                       
                        <option>-keepclassmembers class * {
                                @org.springframework.beans.factory.annotation.Autowired *;
                                @org.springframework.beans.factory.annotation.Value *;
                                @org.springframework.web.bind.annotation.PostMapping *;
                                @org.springframework.web.bind.annotation.DeleteMapping *;
                            }
                        </option>
                    </options>

                    
                    
                    <libs>
                    	<lib>${java.home}/lib/rt.jar</lib>
                    	<lib>${java.home}/lib/jce.jar</lib>
                    </libs>
	            </configuration>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>6.0.2</version>
                        <scope>runtime</scope>
                    </dependency>
                </dependencies>
            </plugin>
			<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                    	<configuration>
                    		<mainClass>cn.com.geovis.monitor.ServiceManageApp</mainClass>
                		</configuration>
                        <phase>none</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    
        </plugins>
    </build>

        然后pom同级目录添加proguard.cfg文件,内容如下:

-target 1.8
-keep class cm.com.geovis.monitor.utils.** {*;}  
-dontshrink
-dontoptimize
-useuniqueclassmembernames
-adaptclassstrings
-ignorewarnings
-dontusemixedcaseclassnames
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

        然后mvn clean install -DskipTest,大功告成,可以看到LoginController类已经被混淆了。

猜你喜欢

转载自blog.csdn.net/u014627099/article/details/88578229