springboot模块化后所有代码整合ProGuard混淆代码

修改pom配置文件

我使用的是JDK21,所以需要高版本的ProGuard,低版本的不行

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>iptvcrm</artifactId>
        <groupId>com.wisetv</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <build>
        <plugins>
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.6.1</version>
                <executions>
                    <execution>
                        <id>proguard</id>
                        <!-- 在打包阶段混淆-->
                        <phase>package</phase>
                        <goals>
                            <!-- 只使用混淆功能-->
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <proguardVersion>7.5.0</proguardVersion>
                    <!-- 原始jar包-->
                    <injar>${project.build.finalName}.jar</injar>
                    <!-- 混淆之后的jar包名  此处与原始一样 混覆盖原始jar包-->
                    <outjar>${project.build.finalName}-pg.jar</outjar>
                    <obfuscate>true</obfuscate>
                    <options>
                        <option>-dontshrink</option>
                        <option>-dontoptimize</option>
                        <!--  ##对于类成员的命名的混淆采取唯一策略-->
                        <option>-useuniqueclassmembernames</option>
                        <!-- This option will replace all strings in reflections method invocations with new class names.
                             For example, invokes Class.forName('className')-->
                        <option>-adaptclassstrings</option>
                        <!--  ## 混淆时不生成大小写混合的类名,默认是可以大小写混合-->
                        <option>-dontusemixedcaseclassnames</option>
                        <!-- This option will save all original annotations and etc. Otherwise all we be removed from files.-->
                        <option>-keepattributes
                            Exceptions,
                            InnerClasses,
                            Signature,
                            Deprecated,
                            SourceFile,
                            LineNumberTable,
                            *Annotation*,
                            EnclosingMethod
                        </option>
                        <!-- This option will save all original names in interfaces (without obfuscate).-->
                        <option>-keepnames interface **</option>
                        <!-- This option will save all original methods parameters in files defined in -keep sections,
                             otherwise all parameter names will be obfuscate.-->
<!--                        <option>-keepparameternames</option>-->
                        <!-- This option will save all original class files (without obfuscate) but obfuscate all
                             in domain and service packages.-->
                        <option>-keep
                            class com.wisetv.useroutbound.app.UserOutBoundApplication {
                            public static void main(java.lang.String[]);
                            }
                        </option>
                        <!-- This option ignore warnings such as duplicate class definitions and classes in incorrectly
                            named files-->
                        <option>-ignorewarnings</option>
                        <!-- This option will save all original class files (without obfuscate) in service package-->
                        <!-- <option>-keep class com.slm.proguard.example.spring.boot.service { *; }</option>-->
                        <!-- This option will save all original interfaces files (without obfuscate) in all packages.-->
                        <option>-keep interface * extends * { *; }</option>
                        <!-- This option will save all original defined annotations in all classes in all packages.-->
                        <option>-keep class com.fasterxml.jackson.** { *; }</option>
                        <option>-keeppackagenames com.wisetv.**</option>
                        <option>-keep class com.wisetv.useroutbound.model.entity.** { *; }</option>
                        <option>-keep class com.wisetv.useroutbound.core.** { *; }</option>
                        <option>-keep class com.wisetv.useroutbound.dao.** { *; }</option>
                        <option>-keep class com.wisetv.useroutbound.controller.** { *; }</option>
                        <option>-keep class com.wisetv.iptvcrm.common.model.** { *; }</option>
                        <option>-keep class org.json.JSONObject.** {** put(java.lang.String,java.util.Map);}</option>
                        <option>-keep class org.gitlab4j.**</option>
                        <option>-keep class org.hibernate.** { *; }</option>
                        <option>-keepclassmembers class * {
                            @org.springframework *;
                            @org.springframework.context.annotation.Bean *;
                            @org.springframework.beans.factory.annotation.Autowired *;
                            @org.springframework.beans.factory.annotation.Value *;
                            }
                        </option>
                        <option>-dontwarn com.fasterxml.jackson.databind.**</option>
                        <option>-dontwarn com.fasterxml.jackson.**</option>
                    </options>
                    <assembly>
                        <inclusions>
                            <inclusion>
                                <groupId>com.wisetv</groupId>
                                <artifactId>iptvcrm-common</artifactId>
                            </inclusion>
                            <inclusion>
                                <groupId>com.wisetv</groupId>
                                <artifactId>crmsecurity</artifactId>
                            </inclusion>
                        </inclusions>
                    </assembly>
                    <injarNotExistsSkip>true</injarNotExistsSkip>
                    <libs>
                        <!--                                                java11-->
                        <lib>${java.home}/jmods/java.base.jmod</lib>
                        <lib>${java.home}/jmods/java.datatransfer.jmod</lib>
                        <lib>${java.home}/jmods/java.prefs.jmod</lib>
                        <lib>${java.home}/jmods/java.xml.jmod</lib>
                        <lib>${java.home}/jmods/java.desktop.jmod</lib>
                        <lib>${java.home}/jmods/</lib>


                        <!-- java8-->
                        <!--Put here your libraries if required-->
                        <!--                        <lib>${java.home}/lib/rt.jar</lib>-->
                    </libs>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>com.guardsquare</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>7.5.0</version>
                        <scope>runtime</scope>
                    </dependency>
                    <dependency>
                        <groupId>com.guardsquare</groupId>
                        <artifactId>proguard-core</artifactId>
                        <version>9.1.5</version>
                        <scope>runtime</scope>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.wisetv.useroutbound.app.UserOutBoundApplication</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <target>
                                <unzip src="${project.build.directory}/${project.build.finalName}.jar"
                                       dest="${project.build.directory}/extracted">
                                    <patternset>
                                        <include name="**/*"/>
                                    </patternset>
                                </unzip>

                                <unzip src="${project.build.directory}/${project.build.finalName}-pg.jar"
                                       dest="${project.build.directory}/extractedpg">
                                    <patternset>
                                        <include name="**/*"/>
                                    </patternset>
                                </unzip>

                                <delete includeEmptyDirs="true">
                                    <fileset dir="${project.build.directory}/extracted/BOOT-INF/classes">
                                        <include name="**/*"/>
                                    </fileset>
                                </delete>
                                <copy todir="${project.build.directory}/extracted/BOOT-INF/classes">
                                    <!-- 指定源目录 -->
                                    <fileset dir="${project.build.directory}/extractedpg/">
                                        <!-- 如果需要,可以在这里指定文件过滤规则 -->
                                        <include name="**/*"/>
                                    </fileset>
                                </copy>

                                <mkdir dir="${project.build.directory}/temp-common"/>
                                <unzip src="${project.build.directory}/extracted/BOOT-INF/lib/iptvcrm-common-1.0-SNAPSHOT.jar"
                                       dest="${project.build.directory}/temp-common"/>

                                <mkdir dir="${project.build.directory}/temp-security"/>
                                <unzip src="${project.build.directory}/extracted/BOOT-INF/lib/crmsecurity-1.0-SNAPSHOT.jar"
                                       dest="${project.build.directory}/temp-security"/>

                                <!-- Step 3: Manually merge the application.properties files -->
                                <concat destfile="${project.build.directory}/extracted/BOOT-INF/classes/application_temp.properties" append="true">
                                    <fileset dir="${project.build.directory}/temp-common/">
                                        <include name="application.properties"/>
                                    </fileset>
                                    <fileset dir="${project.build.directory}/temp-security/">
                                        <include name="application.properties"/>
                                    </fileset>
                                    <fileset dir="${project.build.directory}/extracted/BOOT-INF/classes">
                                        <include name="application.properties"/>
                                    </fileset>
                                </concat>
                                <concat destfile="${project.build.directory}/extracted/BOOT-INF/classes/application_temp.yml" append="true">
                                    <fileset dir="${project.build.directory}/temp-common/">
                                        <include name="application.yml"/>
                                    </fileset>
                                    <fileset dir="${project.build.directory}/temp-security/">
                                        <include name="application.yml"/>
                                    </fileset>
                                    <fileset dir="${project.build.directory}/extracted/BOOT-INF/classes">
                                        <include name="application.yml"/>
                                    </fileset>
                                </concat>
                                <move file="${project.build.directory}/extracted/BOOT-INF/classes/application_temp.properties"
                                      tofile="${project.build.directory}/extracted/BOOT-INF/classes/application.properties"/>
                                <move file="${project.build.directory}/extracted/BOOT-INF/classes/application_temp.yml"
                                      tofile="${project.build.directory}/extracted/BOOT-INF/classes/application.yml"/>

                                <delete includeEmptyDirs="true">
                                    <fileset dir="${project.build.directory}/extracted/BOOT-INF/lib/">
                                        <include name="iptvcrm-common-1.0-SNAPSHOT.jar"/>
                                        <include name="crmsecurity-1.0-SNAPSHOT.jar"/>
                                    </fileset>
                                </delete>
                                <!-- Step 3: Repack the JAR using jar -cfM0 -->
                                <exec executable="jar">
                                    <arg value="-cfM0"/>
                                    <arg value="${project.build.directory}/${project.build.finalName}-final.jar"/>
                                    <arg value="-C"/>
                                    <arg value="${project.build.directory}/extracted"/>
                                    <arg value="."/>
                                </exec>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <artifactId>useroutbound</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.wisetv</groupId>
            <artifactId>iptvcrm-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.wisetv</groupId>
            <artifactId>crmsecurity</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.2.5.Final</version>
        </dependency>
        <!-- Apache Commons Lang -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <!-- 导入需要的 子包 -->
            <artifactId>commons-lang3</artifactId>
            <!-- 请根据需要替换为最新版本 -->
            <version>3.12.0</version>
        </dependency>

    </dependencies>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
    </properties>

</project>

最重要的是增加一个maven-compiler-plugin插件,把springboot的jar包格式转为标准的jar包格式

修改springboot启动类

因为混淆之后代码的函数名都会变成abcd之类的影响springboot加载

package com.wisetv.crmsecurity;

import com.wisetv.crmsecurity.util.SSLUtil;
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.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@SpringBootApplication
public class CrmsecurityApplication {

    public static class CustomGenerator implements BeanNameGenerator {

        @Override
        public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
            return definition.getBeanClassName();
        }
    }


    public static void main(String[] args) {
        SpringApplicationBuilder sab=new SpringApplicationBuilder(CrmsecurityApplication.class)
                .beanNameGenerator(new CustomGenerator());
        sab.run(args);
        SSLUtil.disableSSLVerification();

    }


    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); // 允许cookies跨域
        config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
        config.addAllowedHeader("*");// #允许访问的头信息,*表示全部
        config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
        config.addAllowedMethod("OPTIONS");// 允许提交请求的方法,*表示全部允许
        config.addAllowedMethod("HEAD");
        config.addAllowedMethod("GET");// 允许Get的请求方法
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值