zoukankan      html  css  js  c++  java
  • spring boot2X代码混淆

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

    使用 proguard-maven-plugin插件

    <build>
            <finalName>${artifactId}</finalName>
        <plugins>
                <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.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>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                            <configuration>
                                <mainClass>com.abc.xyz.BWMApiApplication</mainClass>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    
        </plugins>
    
    </build>

    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
  • 相关阅读:
    9 与python2交互
    8 内置函数(未完成)
    7 事务
    [转]jquery.vTicker(垂直滚动)
    2015年工作总结(2016-02-02)
    jQuery plugin : jqTransform
    JQuery知识总结
    JQuery事件处理的注意事项
    JQuery基本选择器
    [二]JQueryMobile常用的组件介绍
  • 原文地址:https://www.cnblogs.com/baby123/p/12085225.html
Copyright © 2011-2022 走看看