代码混淆说明
pom文件配置
- 注意:
- 接口参数名不能变
- 启动类不能变
- 其他bean结构不能变
- 根据项目配置其他不能变动结构
指定spring中bean命名类
- 启动类中指定bean命名生成器 @ComponentScan(nameGenerator = RenameAnnotationBeanNameGenerator.class)
- bean命名生成器
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.AnnotationBeanNameGenerator; import org.springframework.context.annotation.Configuration; import java.beans.Introspector;
/**
- @author ywhome
- @since 2021/3/29 */ public class RenameAnnotationBeanNameGenerator extends AnnotationBeanNameGenerator { @Override protected String buildDefaultBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { String className = definition.getBeanClassName(); return className.startsWith("top.ywhome")?Introspector.decapitalize(className): ClassUtils.getShortName(className); } }
- 示例pom.xml
```xml
<!-- 代码混淆-->
<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>7.0.0</proguardVersion>
<injar>${project.name}-${project.version}.jar</injar>
<outjar>${project.name}-${project.version}.jar</outjar>
<obfuscate>true</obfuscate>
<options>
<option>-dontshrink</option>
<option>-dontoptimize</option>
<option>-useuniqueclassmembernames</option>
<option>-adaptclassstrings </option>
<option>-ignorewarnings</option>
<option>-dontnote org.bouncycastle.**</option>
<option>-dontnote org.apache.**</option>
<option>-dontnote org.aopalliance.**</option>
<option>-dontnote javax.xml.**</option>
<option>-dontnote javax.activation.**</option>
<option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
SourceFile,LineNumberTable,*Annotation*,EnclosingMethod</option>
<option>-keepnames interface **</option>
<option>-keepparameternames</option>
<option>-keep class top.ywhome.Application { *; }</option>
<option>-keepclasseswithmembers class top.ywhome.**.controller.* { *;}</option>
<option>-keepclasseswithmembers interface top.ywhome.**.feign.* { *;}</option>
<option>-keep class top.ywhome.*.entity.** { *; }</option>
<option>-keep class top.ywhome.*.dto.** { *; }</option>
<option>-keep class top.ywhome.*.enums.** { *; }</option>
<option>-keep class top.ywhome.*.beans.** { *; }</option>
<option>-keep class top.ywhome.*.exception.** { *; }</option>
<option>-keep class * implements java.io.Serializable </option>
<option>-keep interface * extends * { *; }</option>
<option>-keepclassmembers enum * { *; }</option>
<option>-keepclassmembers class * {
@javax.annotation.Resource *;
@org.springframework.beans.factory.annotation.Autowired *;
@org.springframework.beans.factory.annotation.Value *;
}
</option>
</options>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>6.2.2</version>
</dependency>
</dependencies>
</plugin>