jfinalQ開發教程03-加密部署
jfinalQ-encrypt
1.簡介
加密class檔案,防止反編譯,可自定義加密解密演算法,支援tomcat部署,非spring框架。
2.原理
首先將class檔案進行位元組流加密,
然後自定義tomcat的ClassLoader,
最後通過自定義的ClassLoader解密並載入class。
3.下載
已經開源到github,地址:https://github.com/uikoo9/jfinalQ-encrypt
4.專案結構
QEncryptFrame.java是加密解密class的gui工具
QClassLoader.java是自定義的ClassLoader
loader.properties是配置檔案
QClassUtil.java是加密解密演算法,可以自行修改
準備工作
1.配置檔案
配置檔案中有兩項:
encrypted_package=com.uikoo9.fore,com.uikoo9.manage,com.uikoo9.z
encrypted_class_path=Z\:/workspaces/jfinalq_01_blog/WebRoot/WEB-INF/classes/
encrypted_package
需要進行加密解密的包,
一般的javaee專案都比較大,對整個專案進行加密解密是不現實的,所以推薦對核心程式碼進行加密解密,
這裡的包名就是核心程式碼的包名,多個包名用逗號分隔。
encrypted_class_path
tomcat中專案的classess資料夾路徑
2.自定義加密解密演算法
jfinalQ-encrypt中的加密解密演算法如下:
package com.uikoo9; /** * 加密解密程式,可以自己定義演算法 * @author qiaowenbin */ public class QClassUtil { /** * 加密程式,可以自己修改 * @param ch * @return */ public static byte encrypt(int ch){ return (byte) (ch + 2); } /** * 解密程式,可以自己修改 * @param ch * @return */ public static byte decrypt(int ch){ return (byte) (ch - 2); } }
可以看到就是簡單的對位元組流進行移位,可以自己定義加密解密演算法。
3.生成class程式碼
如果使用eclipse等,可以clean一下專案,這時會自動生成專案所有的class檔案,
然後將需要加密的class檔案拷貝出去,例如拷貝到e:/test下,
然後將需要加密的class檔案拷貝出去,例如拷貝到e:/test下,
然後將需要加密的class檔案拷貝出去,例如拷貝到e:/test下
加密程式碼
1.加密程式碼
以一個blog專案為例,專案結構:
這裡選擇加密com.uikoo9.fore.controller包,
所以需要修改之前提到的配置檔案中:
encrypted_package=com.uikoo9.fore.controller
執行QEncryptFrame.java檔案,如下:
其中e:/test下為要加密的包,如下:
點選加密按鈕,會提示加密成功。
2.複製程式碼
將加密成功的class程式碼複製到tomcat部署專案中,如下
注意覆蓋完成後,不要做修改程式碼,clean等操作,否則加密後的class會被再次覆蓋。
注意覆蓋完成後,不要做修改程式碼,clean等操作,否則加密後的class會被再次覆蓋。
注意覆蓋完成後,不要做修改程式碼,clean等操作,否則加密後的class會被再次覆蓋。
自定義ClassLoader
1.修改配置檔案
將配置檔案進行對應的修改,加密包修改為對應的包,class路徑修改為tomcat中專案路徑,
encrypted_package=com.uikoo9.fore.controller
encrypted_class_path=Z\:/workspaces/jfinalq_01_blog/WebRoot/WEB-INF/classes/
2.打包
將jfinalQ-encrypt中的loader包和QClassUtil打包為一個jar,如下:
注意,只需要打包com.uikoo9.loader下的檔案和QClassUtil,配置檔案也要打包進去,
注意,只需要打包com.uikoo9.loader下的檔案和QClassUtil,配置檔案也要打包進去,
注意,只需要打包com.uikoo9.loader下的檔案和QClassUtil,配置檔案也要打包進去,
3.定義tomcat的loader
修改tomcat/conf/context.xml檔案,新增如下程式碼:
<Loader loaderClass="com.uikoo9.loader.QClassLoader" delegate="true"></Loader>
新增完後,如下:
4.關於loader的jar命名
上面的Loader將tomcat的loader指向了com.uikoo9.loader.QClassLoader,
其實就是tomcat去tomcat/lib資料夾下去找這個類,
所以這個jar的命名是無關,這裡將jar命名為了類似tomcat自帶jar,tomcat-i18n-ia.jar,如下:
訪問和校驗
1.訪問
啟動tomcat,訪問專案,發現可以正常訪問,如下:
2.校驗
用Java Decompiler對com.uikoo9.fore.controller下的class進行反編譯,發現:
也就是沒辦法反編譯了。
end
至此,對tomcat下非spring專案的加密部署實現。
至此,對tomcat下非spring專案的加密部署實現。
至此,對tomcat下非spring專案的加密部署實現。
jfinalQ2.0
原始碼:https://github.com/uikoo9/jfinalQ
更多精彩內容:http://uikoo9.com/
求打賞(長按圖片即可識別)~ |
捐助列表:http://uikoo9.com/donate/ |