作用:
将类名,和方法名以及字段名修改为简单的abc形式,增加阅读难度
因作者水平有限,只能将service的代码进行混淆
实现:
1.在pom添加插件,修改springboot大打包插件。具体代码如下:
基本不用改,改一下启动类名就行
<build>
<plugins>
<!--混淆代码插件-->
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.14</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardVersion>6.0.3</proguardVersion>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}.jar</outjar>
<obfuscate>true</obfuscate>
<!--一个配置文件,在下一步中-->
<proguardInclude>${basedir}/proguard.conf</proguardInclude>
<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.3</version>
</dependency>
</dependencies>
</plugin>
<!--springboot项目打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<!--启动类-->
<mainClass>com.hn.kiss.KissApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.在根目录添加配置文件 proguard.conf(与pom同级),用于控制那些代码不需要混淆
中间 -keep 开头跟的就是不需要混淆的代码,mapper,dto,entity因为在xml中有应用所以不能混淆,controller混淆我这里会报错,其他的为配置类也不能混淆
-target 1.8
-dontshrink
-dontoptimize
-adaptclassstrings
-ignorewarnings
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keepparameternames
-keep class com.hn.kiss.modules.*.security.** { *; }
-keep class com.hn.kiss.config.** { *; }
-keep class com.hn.kiss.KissApplication { *; }
-keep class com.hn.kiss.modules.*.mapper.** { *; }
-keep class com.hn.kiss.modules.*.dto.** { *; }
-keep class com.hn.kiss.modules.*.entity.** { *; }
-keep class com.hn.kiss.modules.*.controller.** { *; }
-keep class com.hn.kiss.admin.** { *; }
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.Autowired *;
@org.springframework.beans.factory.annotation.Value *;
}
3.修改启动类,用于解决打包混淆后的类名重复问题
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@MapperScan("com.hn.kiss.modules.*.mapper")
@SpringBootApplication
public class KissApplication {
public static class CustomGenerator implements BeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
return definition.getBeanClassName();
}
}
public static void main(String[] args) {
new SpringApplicationBuilder(KissApplication.class)
.beanNameGenerator(new CustomGenerator())
.run(args);
}
}
4.如果用到swagger,启动会报错,在swagger配置类上加上以下注解,让配置不生效.可以解决问题(但是swagger-ui的页面也访问不了)
@ConditionalOnProperty(prefix = "swagger", value = {"enable"}, havingValue = "true")
5.打包后jar可正常执行
效果: