spring boot2X代码混淆

为了防止代码很容易被反编译而造成泄露,所以打包时进行代码混淆

使用 proguard-maven-plugin插件


        ${artifactId}
    
            
                com.github.wvengen
                proguard-maven-plugin
                
                    
                        package
                        proguard
                    
                
                
                    6.0.3
                    ${project.build.finalName}.jar
                    ${project.build.finalName}.jar
                    true
                    ${basedir}/proguard.conf
                    
                        ${java.home}/lib/rt.jar
                        ${java.home}/lib/jce.jar
                    
                
                
                    
                        net.sf.proguard
                        proguard-base
                        6.0.3
                    
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            repackage
                        
                        
                            com.abc.xyz.BWMApiApplication
                        
                    
                
            

    

proguard的阶段为package

springboot打包在repackage阶段

proguard.conf

-target 1.8
-dontshrink
-dontoptimize
-adaptclassstrings
-ignorewarnings
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keepnames interface **
-keepparameternames
-keep class com.abc.xyz.BWMApiApplication { *; }
-keep class com.abc.xyz.configure.** { *; }
-keep class com.abc.xyz.core.** { *; }
-keep class com.abc.xyz.controller.** { *; }
-keep class com.abc.xyz.model.** { *; }
-keep interface * extends * { *; }
-keepclassmembers class * {
      @org.springframework.beans.factory.annotation.Autowired *;
      @org.springframework.beans.factory.annotation.Value *;
  }

proguard混淆不能指定混淆的类名在basePackages下面类名混淆后唯一,不同包名经常有a.class,b.class,c.class之类重复的类名

spring容器初始化bean的时候会报错

修改启动类

package com.xyz.abc;

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;

@SpringBootApplication
public class BWMApiApplication {

    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(BWMApiApplication.class)
                .beanNameGenerator(new CustomGenerator())
                .run(args);
    }
}

如果有报错可以手动执行打包命令

mvn clean package -DskipTests=true -P obfuscation

 

你可能感兴趣的:(spring boot2X代码混淆)