电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot結合ProGuard實現代碼混淆(最新版)

瀏覽:4日期:2023-04-18 13:28:03

前言

研究ProGuard也花了兩天時間,其實最主要的時間花在前面proguard讀取jar包的時候相關jar沖突的問題,但是總的來說不用拆分SpringBoot項目并且實現代碼混淆已經很舒服了。

ProGuard集成

1.maven的配置

具體配置如下:

<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.2.2</proguardVersion><injar>${project.build.finalName}.jar</injar><outjar>${project.build.finalName}.jar</outjar><!--<proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>--><obfuscate>true</obfuscate><options><!-- 不做收縮(刪除注釋、未被引用代碼)--><option>-dontshrink</option><!-- 不做優化(變更代碼實現邏輯)--><option>-dontoptimize</option><!--保持目錄結構,否則spring的自動注入無法使用--><!--<option>-keepdirectories</option>--><option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable, *Annotation*,EnclosingMethod</option><option>-adaptclassstrings</option><option><!-- 保護程序入口 --> -keep class com.jingchen.ccny.CmepApplication { *; }</option><option>-keepnames interface ** { *; }</option><!-- 固定幾個類不能混淆--><option>-keepnames class com.jingchen.ccny.base.BaseService { *; }</option><option>-keep class com.jingchen.ccny.common.cache.ConvertorNewCache { *; }</option><option>-keep class com.jingchen.ccny.base.ControllerContext { *; }</option><option>-keep class * extends com.jingchen.ccny.base.BaseService</option><option>-keep class * implements com.jingchen.ccny.common.service.CallBackGuiService</option><option>-keep class * implements com.jingchen.ccny.common.service.CallBackUDService</option><option>-keep class com.jingchen.ccny.util.SpringUtil</option><!--<option>-keep interface * extends * { *; }</option>--><!-- 此選項將在所有包的所有類中保存所有原始定義的注釋.--><option> -keep class * {@org.springframework.beans.factory.annotation.Autowired *;@org.springframework.beans.factory.annotation.Value *;@org.springframework.stereotype.Service *;@org.springframework.stereotype.Component *;@org.springframework.scheduling.annotation.Scheduled *;}</option></options><libs><!-- Include main JAVA library required.--><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.2.2</version></dependency></dependencies></plugin><!-- Maven assembly must be run after proguard obfuscation so it take already obfuscated files.--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals><configuration><mainClass>com.jingchen.ccny.CcnyApplication</mainClass></configuration></execution></executions></plugin></plugins></build>

這里里面級聯引用的jar很多,建議配置了私服的人先把鏡像地址配置成maven中央倉庫地址,這樣先下下來相關依賴的包,然后再上傳到你們的私服上去。據我研究中知道的jar就有:

SpringBoot結合ProGuard實現代碼混淆(最新版)

注意:不連外網配置maven中央倉庫的話,少了jar你們會很頭疼的。而且不止net.sf.proguard相關包,還包括了com.guardsquare.proguard-base 和 com.guardsquare.proguard-core 相關的jar,所以真的連外網下包很重要!!!!

推薦一個IDEA解決maven引用沖突的插件:Maven Helper

2.相關異常解決

idea A required class was missing … org/apache/tools/ant/BuildListener問題原因:這個問題就是上面提到的因為apache的編譯用了一個ant-1.9.3的包,這個是級聯引用的,開始我是內網maven私服,單純的引入net.sf.proguard相關和com.github.wvengen相關的jar還是會缺少很多jar解決方案:連上外網,配置你的maven的setting.xml 的mirror鏡像地址,配置成Maven中央倉庫的地址,將相關的jar都下下來,然后再通過命令把你本地maven倉庫的jar上傳到私服去

Can’t process class [META-INF/versions/9/org/apache/logging/log4j/util/Base64Util.class]

Can’t process class [META-INF/versions/11/module-info.class]問題原因這個問題的原因有很多方面,最主要的就是我們的jdk版本是1.8,我最開始用的ProGuard是5.3.3版本,然而我們SpringBoot的版本是2.3.3版本,SpringBoot2.3.3版本太新了,里面引用的相關包都是java9和java11的版本,這樣ProGuard在讀jar的時候會無法識別。這些問題在提升Proguard版本到6.2.2之后都解決了解決方案開始我的解決方案是忽略這些相關的jar, 例如在pom.xml的option配置:

<option>-libraryjars ${settings.localRepository}/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5.jar(META-INF/versions/11/module-info.class)</option>

但是我這樣配置之后,重新打包會提示:

The same input jar [E:mavenrepocomzaxxerHikariCP3.4.5HikariCP-3.4.5.jar] is specified twice.解決方案:而且我還嘗試了maven引用的時候排除這些高版本的級聯引用jar,單獨引用低版本,但最終還是因為太繁瑣而放棄了。直接提升Proguard版本到6.2.2 這些讀jar的版本問題就解決了。Annotation-specified bean name ‘a’ for bean class問題原因:出現這個問題主要還是混淆之后,bean重名了,spring默認是把類名的首字母小寫加載到容器里面,我們混淆類名之后,就容易造成beanName重復。解決方案:慶幸的是,我們可以通過改變spring加載bean的命名策略來解決這個問題,把包名帶上,同時在獲取Spring上下文getBean的時候,加上包名路徑即可啟動類配置,具體如下:

@SpringBootApplicationpublic class CcnyApplication{public static class CustomGenerator implements BeanNameGenerator {@Overridepublic String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {return definition.getBeanClassName();}}public static void main(String[] args) {SpringApplicationBuilder sab=new SpringApplicationBuilder(CcnyApplication.class).beanNameGenerator(new CustomGenerator());//這里如果想打印你加載的Spring的bean,可以這樣做:ApplicationContext ac =sab.run(args);Arrays.stream(ac.getBeanDefinitionNames()).forEach(System.out::println);}}

這樣配置,你啟動的時候就能看到加載的所有的beanName(這里Service會帶上package路徑)

其他地方getBean的用法:

//這里的packagePath = com.jingchen.ccny.serviceCallBackGuiService callBackGuiService = (CallBackGuiService) SpringUtil.getBean(packagePath+serviceName); callBackResult = callBackGuiService.excute(convertMap);

這樣你就能正常的獲取到Spring容器加載的beanName了

注意事項

基本上影響打包和啟動的就上面一些問題了,其他的就是你們項目里面的細節了,

比如DAO要保留,要和mybatis里面的Mapper映射對應,DAO里面的方法傳參要改為map或者實體,另外序列化后的實體要保留 Controller里面的方法入參,如果用了實體,這部分實體也要保留(保證其變量不會被混淆,不然傳值收不到) 另外就是你們spring相關的XML里面,如果單獨配置了Bean和Bean屬性的,這類bean要保留,不能被混淆 我這里保留了所有的接口和接口里面的方法,已經我們自定義的抽象類BaseService里面的方法名不會被混淆,這些你們可以自己定義,而且我這里定義了有標注@Component的類也保留類名,按照我上面的配置,基本上可以不用重新構建beanName。正常的application啟動就完事了 其他的沒了,就看你們還有沒有什么特定的類不能被混淆,以及你們要混淆的力度(我們的要求是保留所有類名、接口信息和抽象類信息,除此之外的所有類和方法都被混淆!)

總的來說花了兩天時間,有這樣的成果也是值得高興的,前一天解決jar沖突的比較多,主要原因就是最開始XX架構師搭建這個項目采用最新的SpringBoot版本,jdk確是1.8 , 很多不兼容。

來個最終的效果圖吧:

SpringBoot結合ProGuard實現代碼混淆(最新版)

參考案例

1、Springboot+proguard+maven 混淆.2、proguard-spring-boot-example3、官方解釋4、Proguard的Keep使用方法5、ProGuard 最全混淆規則說明6、ProGuard代碼混淆技術詳解7、使用proguard混淆springboot代碼

到此這篇關于SpringBoot結合ProGuard實現代碼混淆(最新版)的文章就介紹到這了,更多相關SpringBoot ProGuard代碼混淆內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 高精度电阻回路测试仪-回路直流电阻测试仪-武汉特高压电力科技有限公司 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 婚博会2024时间表_婚博会门票领取_婚博会地址-婚博会官网 | 今日扫码_溯源二维码_产品防伪一物一码_红包墙营销方案 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 膜片万向弹性联轴器-冲压铸造模具「沧州昌运模具」 | 三防漆–水性三防漆–水性浸渍漆–贝塔三防漆厂家 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 江西自考网| 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 韦伯电梯有限公司 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 广西教师资格网-广西教师资格证考试网 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 |