SpringBoot 項目 Jar 包加密,防止反編譯

1場景

最近項目要求部署到其他公司的服務器上,但是又不想將源碼泄露出去。要求對正式環境的啟動包進行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來。

2方案

第一種方案使用代碼混淆

采用proguard-maven-plugin插件

在單模塊中此方案還算簡單,但是現在項目一般都是多模塊,一個模塊依賴多個公共模塊。那么使用此方案就比較麻煩,配置復雜,文檔難懂,各模塊之間的調用在是否混淆時極其容易出錯。

第二種方案使用代碼加密

采用classfinal-maven-plugin插件

此方案比對上面的方案來說,就簡單了許多。直接配置一個插件就可以實現源碼的安全性保護。并且可以對yml、properties配置文件以及lib目錄下的maven依賴進行加密處理。若想指定機器啟動,支持綁定機器,項目加密后只能在特定機器運行。

ClassFinal項目源碼地址[1]

3項目操作

只需要在啟動類的pom.xml文件中加如下插件即可,需要注意的是,改插件時要放到spring-boot-maven-plugin插件后面,否則不起作用。

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><!--1.?加密后,方法體被清空,保留方法參數、注解等信息.主要兼容swagger文檔注解掃描2.?方法體被清空后,反編譯只能看到方法名和注解,看不到方法體的具體內容3.?加密后的項目需要設置javaagent來啟動,啟動過程中解密class,完全內存解密,不留下任何解密后的文件4.?啟動加密后的jar,生成xxx-encrypted.jar,這個就是加密后的jar文件,加密后不可直接執行5.?無密碼啟動方式,java?-javaagent:xxx-encrypted.jar?-jar?xxx-encrypted.jar6.?有密碼啟動方式,java?-javaagent:xxx-encrypted.jar='-pwd=?密碼'?-jar?xxx-encrypted.jar--><groupId>net.roseboy</groupId><artifactId>classfinal-maven-plugin</artifactId><version>1.2.1</version><configuration><password>#</password><!--?#表示啟動時不需要密碼,事實上對于代碼混淆來說,這個密碼沒什么用,它只是一個啟動密碼?--><excludes>org.spring</excludes><packages>${groupId}</packages><!--?加密的包名,多個包用逗號分開?--><cfgfiles>application.yml,application-dev.yml</cfgfiles><!--?加密的配置文件,多個包用逗號分開?--><libjars>hutool-all.jar</libjars>?<!--?jar包lib下面要加密的jar依賴文件,多個包用逗號分開?--><code>xxxx</code>?<!--?指定機器啟動,機器碼?--></configuration><executions><execution><phase>package</phase><goals><goal>classFinal</goal></goals></execution></executions></plugin></plugins>
</build>

4啟動方式

無密碼啟動

java?-javaagent:xxx-encrypted.jar?-jar?xxx-encrypted.jar

有密碼啟動

java?-javaagent:xxx-encrypted.jar='-pwd=密碼'?-jar?xxx-encrypted.jar

5反編譯效果

啟動包加密之后,方法體被清空,保留方法參數、注解等信息.主要兼容swagger文檔注解掃描

反編譯只能看到方法名和注解,看不到方法體的具體內容

啟動過程中解密class,完全內存解密,不留下任何解密后的文件

yml配置文件留下空白

6綁定機器啟動

下載到classfinal-fatjar-1.2.1.jar[2]依賴,在當前依賴下cmd執行java -jar classfinal-fatjar-1.2.1.jar -C命令,會自動生成一串機器碼

將此生成好的機器碼,放到maven插件中的code里面即可。這樣,打包好的項目只能在生成機器碼的機器運行,其他機器則啟動不了項目。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211342.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211342.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211342.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

調用別人提供的接口無法通過try catch捕獲異常(C#),見鬼了

前幾天做CA簽名這個需求時發現一個很詭異的事情&#xff0c;CA簽名調用的接口是由另外一個開發部門的同事(比較難溝通的那種人)封裝并提供到我們這邊的。我們這邊只需要把數據準備好&#xff0c;然后調他封裝的接口即可完成簽名操作。但在測試過程中&#xff0c;發現他提供的接…

[后端卷前端2]

綁定class 為什么需要樣式綁定呢? 因為有些樣式我們希望能夠動態展示 看下面的例子: <template><div><p :class"{active:modifyFlag}">class樣式綁定</p></div> </template><script>export default {name: "goo…

人力資源服務展示網站作用有哪些

就業勞務問題往往是不少人群關注的問題&#xff0c;每個城市都聚集著大量求業者&#xff0c;而人力資源管理公司每年也會新增不少&#xff0c;對求業者來說&#xff0c;通過人力資源公司可以快速便捷的找到所需工作&#xff0c;而對公司來說&#xff0c;市場大量用戶可以帶來收…

C語言第十八集(動態內存管理)

1.malloc函數可以開辟一塊空間,具體搜: 2.malloc函數申請的空間在內存的堆區 而且它只負責幫你申請空間,不負責幫你清理空間 3.free函數可以釋放內存 4.free函數釋放的是內存中的堆區,具體搜: 5.在free函數調用完后記得把對應的指針設為空指針 6.calloc函數跟malloc函數差…

揭秘字符串的奧秘:探索String類的深層含義與源碼解讀

文章目錄 一、導論1.1 引言&#xff1a;字符串在編程中的重要性1.2 目的&#xff1a;深入了解String類的內部機制 二、String類的設計哲學2.1 設計原則&#xff1a;為什么String類如此重要&#xff1f;2.2 字符串池的概念與作用 三、String類源碼解析3.1 成員變量3.2 構造函數3…

[今來] 神話故事:金馬和碧雞

文章目錄 金馬山和碧雞山神話傳說金馬坊和碧雞坊金馬碧雞 金馬山和碧雞山 昆明山明水秀&#xff0c;北枕蛇山&#xff0c;南臨滇池&#xff0c;金馬山和碧雞山則東西夾峙&#xff0c;隔水相對&#xff0c;極盡湖光山色之美。金馬山逶迤而玲瓏&#xff0c;碧雞山峭拔而陡峻&…

[Java][Map]linkedhashmap的引入

我們可以看到&#xff1a; linkedhashmap中元素的讀取是有順序的&#xff0c;基于這種雙向鏈表 我們可以優先讀取8索引bucket上的元素 然后讀取3索引bucket上的元素&#xff0c;以及其掛載的元素 最后讀取0索引bucket上的元素 bucket是hashbucket! 這種寫法是很有序的 也是…

Pytorch初步使用

文章目錄 創建張量指定設備沿軸計算 創建張量 如果說數組是numpy的操作對象&#xff0c;那么張量Tensor就是pytorch的操作單元&#xff0c;從數據內容來說&#xff0c;與高維數組是如出一轍的&#xff0c;但作為一個類&#xff0c;其構造函數支持通過聲明張量的維度來進行初始…

clickhouse數據庫磁盤空間使用率過高問題排查

一、前言 clickhouse天天觸發磁盤使用率過高告警&#xff0c;所以需要進行排查&#xff0c;故將排查記錄一下。 二、排查過程 1、連接上進入clickhouse 2、執行語句查看各庫表使用磁盤情況 SELECT database, table, formatReadableSize(sum(bytes_on_disk)) as disk_space F…

藍橋杯物聯網競賽_STM32L071_8_ADC擴展模塊

原理圖&#xff1a; 擴展模塊原理圖&#xff1a; RP1和RP2分別對應著AIN1和AIN2&#xff0c;扭動它們&#xff0c;其對應滑動變阻器阻值也會變化 實驗板接口原理圖&#xff1a; 對應實驗板接口PB1和PB0 即AN1對應PB1, AN2對應PB0 CubMx配置&#xff1a; ADC通道IN8和IN9才對…

C#.net使用npgsql批量寫入數據入庫到postgresql數據庫

C#.net使用npgsql批量寫入數據入庫到postgresql數據庫 npgsql批量存儲數據1. 單條存儲2. 批量存儲 npgsql批量存儲數據 轉載自&#xff1a;https://blog.csdn.net/liuwanying0226/article/details/130825503 1. 單條存儲 當有類型限定時&#xff0c;例如jsonb&#xff0c;在…

uniApp項目的創建,運行到小程序

一、項目創建 1. 打開 HBuilder X 2. 右擊側邊欄點擊新建&#xff0c;選擇項目 3. 填寫項目名&#xff0c;點擊創建即可 注&#xff1a;uniapp中如果使用生命周期鉤子函數&#xff0c;建議使用哪種 ?(建議使用Vue的) 二、運行 1. 運行前先登錄 2. 登錄后點擊 manifest.js…

基于lambda簡化設計模式

前言 雖說使用設計模式可以讓復雜的業務代碼變得清晰且易于維護&#xff0c;但是某些情況下&#xff0c;開發可能會遇到我為了簡單的業務邏輯去適配設計模式的情況&#xff0c;本文筆者就以四種常見的設計模式為例&#xff0c;演示如何基于lambda來簡化設計模式的實現。 策略…

WorkPlus高效助力企業溝通的專業級即時通訊軟件

在當今高度信息化和全球化競爭的世界&#xff0c;企業需要一個高效便捷的溝通工具來促進團隊協作、提高工作效率。在這樣的背景下&#xff0c;WorkPlus作為一款專業級的即時通訊軟件應運而生。讓我們一起深入了解WorkPlus&#xff0c;探討其在企業溝通中的領先優勢和卓越能力。…

平衡二叉樹

AVL簡稱平衡二叉樹&#xff0c;縮寫為BBST&#xff0c;由蘇聯數學家 Adelse-Velskil 和 Landis 在 1962 年提出。 二叉樹是動態查找的典范&#xff0c;但在極限情況下&#xff0c;二叉樹的查找效果等同于鏈表&#xff0c;而平衡二叉樹可以完美的達到 log ? 2 n \log_2 n log2…

ElementPlus table 中嵌套 input 輸入框

文章目錄 需求分析 需求 vue3 項目中 使用UI組件庫 ElementPlus 時&#xff0c;table 中嵌入 input輸入框 分析 <template><div class"p-10"><el-table :data"tableData" border><el-table-column prop"date" label&qu…

課堂練習4.1:段式內存管理

4-1 課堂練習4.1&#xff1a;段式內存管理 段式內存管理以段為單位分配內存空間&#xff0c;段內連續&#xff0c;段間可以不連續。段可以很大&#xff0c;比如數據段、代碼段、棧段等。本實訓分析 Linux 0.11 的段式內存管理技術。 第1關1 號進程 mynext 變量的邏輯地址與線性…

cache教程 3.HTTP服務器

上一節我們實現了單機版的緩存服務&#xff0c;但是我們的目標是分布式緩存。那么&#xff0c;我們就需要把緩存服務部署到多態機器節點上&#xff0c;對外提供訪問接口。客戶端就可以通過這些接口去實現緩存的增刪改查。 分布式緩存需要實現節點間通信&#xff0c;而通信方法…

【面試經典150 | 二叉樹】翻轉二叉樹

文章目錄 寫在前面Tag題目來源題目解讀解題思路方法一&#xff1a;遞歸方法二&#xff1a;迭代 寫在最后 寫在前面 本專欄專注于分析與講解【面試經典150】算法&#xff0c;兩到三天更新一篇文章&#xff0c;歡迎催更…… 專欄內容以分析題目為主&#xff0c;并附帶一些對于本題…

4-SpringMVC

文章目錄 項目源碼地址回顧-MVC什么是MVC&#xff1f;MVC各部分組成 回顧-ServletMaven創建Web項目1、創建Maven父工程pom&#xff0c;并導入依賴2、用Maven新建一個Web Module3、代碼&#xff1a;HelloServlet.java3、代碼-hello.jsp3、代碼-web.xml4、配置Tomcat5、瀏覽器測試…