最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用proguard對(duì)maven構(gòu)建的springboot項(xiàng)目進(jìn)行混淆方式

 更新時(shí)間:2024年11月21日 14:44:26   作者:dlut-王不留行  
文章介紹了如何使用ProGuard對(duì)Maven構(gòu)建的Spring Boot項(xiàng)目進(jìn)行混淆,并解決混淆后可能遇到的版本兼容性問題和類名沖突問題,主要步驟包括下載高版本的ProGuard、配置POM文件、添加ProGuard配置文件、修改Spring Boot啟動(dòng)文件以避免類名沖突

1,配置混淆的問題

配置混淆的時(shí)候可能會(huì)報(bào)很多版本錯(cuò),包括但不限于java版本不對(duì),springboot版本不對(duì),log4j版本不對(duì)。。。。。

其實(shí)只要proguard版本上去了就行,得自己下一個(gè)高版本的proguard.jar.

由于proguard混淆貌似不能指定混淆的類名在basePackages下面類名混淆后唯一,不同包名經(jīng)常有a.class,b.class,c.class之類重復(fù)的類名,因此spring容器初始化bean的時(shí)候會(huì)報(bào)錯(cuò),因?yàn)閟pring不允許不同包下類名一樣,我們需要改變spring的bean的命名策略來解決這個(gè)問題 (見步驟2.4)

dao和domain層不要混淆

2,配置過程

2.1 首先下載

下載proguard 6.2.2,其他版本也行,那就把pom的配置改一改版本號(hào),然后在和pom同一級(jí)的lib下將proguard文件放進(jìn)去,千萬別放在src下,不然等于讓這個(gè)jar包混淆自己,鐵定報(bào)錯(cuò)

2.2 maven pom配置中加入以下

<!-- ProGuard混淆插件-->
<plugin>
    <groupId>com.github.wvengen</groupId>
    <artifactId>proguard-maven-plugin</artifactId>

    <executions>
        <execution>
            <!-- 混淆時(shí)刻,這里是打包的時(shí)候混淆-->
            <phase>package</phase>
            <goals>
                <!-- 指定使用插件的混淆功能 -->
                <goal>proguard</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <proguardVersion>6.2.2</proguardVersion>
        <!-- 是否將生成的PG文件安裝部署-->
        <attach>true</attach>
        <!-- 是否混淆-->
        <obfuscate>true</obfuscate>
        <!-- 指定生成文件分類 -->
        <attachArtifactClassifier>pg</attachArtifactClassifier>
        <proguardInclude>${basedir}/proguard.conf</proguardInclude>
        <libs>
            <lib>${java.home}/lib/rt.jar</lib>
            <lib>${java.home}/lib/jce.jar</lib>
            <lib>${java.home}/lib/jsse.jar</lib>
        </libs>
        <!-- 對(duì)什么東西進(jìn)行加載,這里僅有classes成功,不可能對(duì)配置文件及JSP混淆吧-->
        <injar>classes</injar>
        <outjar>${project.build.finalName}-pg.jar</outjar>
        <!-- 輸出目錄-->
        <outputDirectory>${project.build.directory}</outputDirectory>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>net.sf.proguard</groupId>
            <artifactId>proguard-base</artifactId>
            <version>6.2.2</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/proguard.jar</systemPath>
        </dependency>
    </dependencies>
</plugin>

2.3 在pom同級(jí)目錄下添加proguard.conf文件

# 忽略所有警告,否則有警告的時(shí)候混淆會(huì)停止
-ignorewarnings

# JDK目標(biāo)版本1.8
-target 1.8

# 不做收縮(刪除注釋、未被引用代碼)
-dontshrink

# 不做優(yōu)化(變更代碼實(shí)現(xiàn)邏輯)
-dontoptimize

# 不路過非公用類文件及成員
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers

## 混淆時(shí)不生成大小寫混合的類名,默認(rèn)是可以大小寫混合
-dontusemixedcaseclassnames

# 優(yōu)化時(shí)允許訪問并修改有修飾符的類和類的成員
-allowaccessmodification

# 確定統(tǒng)一的混淆類的成員名稱來增加混淆
-useuniqueclassmembernames

# 不混淆所有包名,本人測(cè)試混淆后WEB項(xiàng)目問題實(shí)在太多,畢竟Spring配置中有大量固定寫法的包名
-keeppackagenames

# 不混淆局部變量名
-keepparameternames

# 不刪除注解
-keepattributes *Annotation*

# 不混淆所有特殊的類 LocalVariable*Table,
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,Synthetic,EnclosingMethod

# 不混淆所有的set/get方法,畢竟項(xiàng)目中使用的部分第三方框架(例如Shiro)會(huì)用到大量的set/get映射
-keepclassmembers public class * {void set*(***);*** get*();}

##對(duì)異常、注解信息在runtime予以保留,不然影響springboot啟動(dòng)
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

##保留main方法的類及其方法名
-keepclasseswithmembers public class * { public static void main(java.lang.String[]);}

##保留枚舉成員及方法
-keepclassmembers enum * { *; }

# 不混淆泛型
-keepattributes Signature

#?。。。。。?!不混淆dao和domain?。。。?!
-keep class com.dingding.managerplate.system.dao.** {*;}
-keep class com.dingding.managerplate.system.domain.** {*;}

#可以通過這個(gè)配置自己添加混淆字典
#-classobfuscationdictionary  ./filename.txt

## 混淆類名之后,對(duì)使用Class.forName('className')之類的地方進(jìn)行相應(yīng)替代
#-adaptclassstrings

# 保持類protected不被混淆
#-keep public class * { public protected <fields>;public protected <methods>; }

2.4 修改springboot的啟動(dòng)文件

讓springboot為bean命名時(shí)將包名帶上,不然會(huì)因?yàn)榛煜蟛煌鲁霈F(xiàn)同名類而產(chǎn)生沖突

@SpringBootApplication
public class ManagerplateApplication {

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

2.5 執(zhí)行 sudo mvn clean package -DskipTests

(最好加sudo,別問我怎么知道的)

2.6 混淆完成,生成可執(zhí)行jar包

在target目錄下會(huì)生成4個(gè)文件:

  • classes-pg.jar 混淆后的classes文件,里面包含完整的項(xiàng)目結(jié)構(gòu)
  • proguard_map.txt 混淆內(nèi)容的映射
  • proguard_seed.txt 參與混淆的類
  • 還有一個(gè)未混淆的原始jar包
#解壓class-pg.jar 和未混淆的jar包
unzip class-pg.jar
unzip 未混淆的jar包
#將class-pg.jar解壓出的所有內(nèi)容替換掉 未混淆的jar包/BOOT-INF/classes下的全部文件
#重新打包被替換過的jar包
jar cvfM0 name.jar *

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    圖形編程中,窗口是一個(gè)重要的概念,窗口其實(shí)是一個(gè)矩形框,應(yīng)用程序可以使用其從而達(dá)到輸出結(jié)果和接受用戶輸入的效果,學(xué)習(xí)了GUI就讓我們用它來創(chuàng)建一個(gè)窗體
    2022-05-05
  • SpringBoot整合RocketMQ極速實(shí)戰(zhàn)教程

    SpringBoot整合RocketMQ極速實(shí)戰(zhàn)教程

    本文詳細(xì)介紹了SpringBoot集成RocketMQ的全過程,涵蓋普通、廣播、順序、延遲、批量、過濾、事務(wù)等多種消息模式,通過自動(dòng)裝配、全局配置、核心組件等介紹RocketMQ與SpringBoot的深入集成原理與實(shí)戰(zhàn)應(yīng)用,感興趣的朋友一起看看吧
    2026-06-06
  • 分享Spring的下載組件

    分享Spring的下載組件

    這篇文章主要為大家分享了Spring的下載組件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • SpringBoot基于Minio實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    SpringBoot基于Minio實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    本文主要介紹了SpringBoot基于Minio實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Spring?Security方法級(jí)安全控制@PreAuthorize注解的靈活運(yùn)用小結(jié)

    Spring?Security方法級(jí)安全控制@PreAuthorize注解的靈活運(yùn)用小結(jié)

    本文將帶著大家講解?@PreAuthorize?注解的核心原理、SpEL?表達(dá)式機(jī)制,并通過的示例代碼演示如何在實(shí)際項(xiàng)目中靈活運(yùn)用該注解實(shí)現(xiàn)細(xì)粒度的權(quán)限控制,感興趣的朋友一起看看吧
    2025-04-04
  • java實(shí)現(xiàn)抽獎(jiǎng)功能解析

    java實(shí)現(xiàn)抽獎(jiǎng)功能解析

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)抽獎(jiǎng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • MyBatis中正則使用foreach拼接字符串

    MyBatis中正則使用foreach拼接字符串

    這篇文章主要介紹了MyBatis中正則使用foreach拼接字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java算法練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(1)

    Java算法練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(1)

    方法下面小編就為大家?guī)硪黄狫ava算法的一道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • java 記錄一個(gè)子串在整串中出現(xiàn)的次數(shù)實(shí)例

    java 記錄一個(gè)子串在整串中出現(xiàn)的次數(shù)實(shí)例

    今天小編就為大家分享一篇java 記錄一個(gè)子串在整串中出現(xiàn)的次數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Java調(diào)用Creo?2.0讀取/修改模型參數(shù)的實(shí)戰(zhàn)指南

    Java調(diào)用Creo?2.0讀取/修改模型參數(shù)的實(shí)戰(zhàn)指南

    本文詳細(xì)講解了使用Java調(diào)用Creo2.0實(shí)現(xiàn).prt模型參數(shù)讀取與修改的方法,強(qiáng)調(diào)方向大于努力,不可完全依賴AI;提供實(shí)測(cè)可用代碼、操作步驟及避坑要點(diǎn);涵蓋環(huán)境配置、關(guān)鍵注意事項(xiàng)、執(zhí)行步驟與常見問題排查等內(nèi)容,適合Creel.0二次開發(fā)新手參考,需要的朋友可以參考下
    2026-05-05

最新評(píng)論

高平市| 五指山市| 思南县| 彩票| 西乌| 阜平县| 北流市| 团风县| 赞皇县| 水城县| 辽阳市| 武汉市| 钟祥市| 紫金县| 霞浦县| 北海市| 磴口县| 和硕县| 蒙城县| 固镇县| 泰和县| 溧水县| 图们市| 平定县| 温宿县| 绵竹市| 永春县| 保德县| 保康县| 社会| 崇左市| 全椒县| 左贡县| 贵阳市| 中宁县| 台安县| 偃师市| 苏尼特左旗| 肇东市| 利津县| 遂川县|