日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot結(jié)合ProGuard實(shí)現(xiàn)代碼混淆(最新版)

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

前言

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

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><!-- 不做優(yōu)化(變更代碼實(shí)現(xiàn)邏輯)--><option>-dontoptimize</option><!--保持目錄結(jié)構(gòu),否則spring的自動(dòng)注入無法使用--><!--<option>-keepdirectories</option>--><option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable, *Annotation*,EnclosingMethod</option><option>-adaptclassstrings</option><option><!-- 保護(hù)程序入口 --> -keep class com.jingchen.ccny.CmepApplication { *; }</option><option>-keepnames interface ** { *; }</option><!-- 固定幾個(gè)類不能混淆--><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>--><!-- 此選項(xiàng)將在所有包的所有類中保存所有原始定義的注釋.--><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>

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

SpringBoot結(jié)合ProGuard實(shí)現(xiàn)代碼混淆(最新版)

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

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

2.相關(guān)異常解決

idea A required class was missing … org/apache/tools/ant/BuildListener問題原因:這個(gè)問題就是上面提到的因?yàn)閍pache的編譯用了一個(gè)ant-1.9.3的包,這個(gè)是級聯(lián)引用的,開始我是內(nèi)網(wǎng)maven私服,單純的引入net.sf.proguard相關(guān)和com.github.wvengen相關(guān)的jar還是會(huì)缺少很多jar解決方案:連上外網(wǎng),配置你的maven的setting.xml 的mirror鏡像地址,配置成Maven中央倉庫的地址,將相關(guān)的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]問題原因這個(gè)問題的原因有很多方面,最主要的就是我們的jdk版本是1.8,我最開始用的ProGuard是5.3.3版本,然而我們SpringBoot的版本是2.3.3版本,SpringBoot2.3.3版本太新了,里面引用的相關(guān)包都是java9和java11的版本,這樣ProGuard在讀jar的時(shí)候會(huì)無法識(shí)別。這些問題在提升Proguard版本到6.2.2之后都解決了解決方案開始我的解決方案是忽略這些相關(guān)的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>

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

The same input jar [E:mavenrepocomzaxxerHikariCP3.4.5HikariCP-3.4.5.jar] is specified twice.解決方案:而且我還嘗試了maven引用的時(shí)候排除這些高版本的級聯(lián)引用jar,單獨(dú)引用低版本,但最終還是因?yàn)樘爆嵍艞壛恕V苯犹嵘齈roguard版本到6.2.2 這些讀jar的版本問題就解決了。Annotation-specified bean name ‘a(chǎn)’ for bean class問題原因:出現(xiàn)這個(gè)問題主要還是混淆之后,bean重名了,spring默認(rèn)是把類名的首字母小寫加載到容器里面,我們混淆類名之后,就容易造成beanName重復(fù)。解決方案:慶幸的是,我們可以通過改變spring加載bean的命名策略來解決這個(gè)問題,把包名帶上,同時(shí)在獲取Spring上下文getBean的時(shí)候,加上包名路徑即可啟動(dòng)類配置,具體如下:

@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);}}

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

其他地方getBean的用法:

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

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

注意事項(xiàng)

基本上影響打包和啟動(dòng)的就上面一些問題了,其他的就是你們項(xiàng)目里面的細(xì)節(jié)了,

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

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

來個(gè)最終的效果圖吧:

SpringBoot結(jié)合ProGuard實(shí)現(xiàn)代碼混淆(最新版)

參考案例

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

到此這篇關(guān)于SpringBoot結(jié)合ProGuard實(shí)現(xiàn)代碼混淆(最新版)的文章就介紹到這了,更多相關(guān)SpringBoot ProGuard代碼混淆內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费精品视频最新在线| aa亚洲婷婷| 亚洲欧美在线专区| 黄色日韩在线| 激情欧美丁香| 在线成人动漫av| 国产91欧美| 久久久精品国产**网站| 国产日韩欧美一区二区三区 | 中文在线免费视频| 成人国产精品一区二区网站| 国产一区二区三区四区大秀| 国产成人精品福利| 伊人久久国产| 成人看片网站| 久久麻豆精品| 激情综合网站| 夜夜精品视频| 美国欧美日韩国产在线播放| 日韩一区精品字幕| 亚洲视频二区| 亚州欧美在线| 国产一精品一av一免费爽爽| 欧美日韩一区自拍| 美女久久久久久| 国产精品久久久久久久免费观看| 高清不卡亚洲| 极品日韩av| 三级亚洲高清视频| 亚洲精选av| 日本午夜精品视频在线观看| 国产精品一二| 国产盗摄——sm在线视频| 久久久久久久久99精品大| 午夜日本精品| 日本一区二区三区视频在线看| 国产乱码精品一区二区三区亚洲人| 久久久久黄色| 色婷婷色综合| 天堂资源在线亚洲| 免费国产亚洲视频| 久久国产乱子精品免费女| 91亚洲国产成人久久精品| 免费不卡中文字幕在线| 一区二区三区网站| 国产精品久久久久久妇女| 国产精品伦理久久久久久| 欧美日韩免费观看一区=区三区| 亚洲精品美女| 久久三级中文| 欧美日韩日本国产亚洲在线| 日本成人在线网站| 国产91欧美| 国产一区二区精品| 国产精品sm| 亚洲先锋成人| 欧美午夜三级| 欧美日韩在线二区| 97精品久久| 亚洲天堂1区| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产成人精品三级高清久久91| 国产综合视频| 欧美久久亚洲| 亚洲成人一区| 免费在线日韩av| 免费不卡中文字幕在线| 欧美日韩a区| 欧美在线资源| 国际精品欧美精品| 日韩中文字幕一区二区高清99| 中文字幕在线视频久| 亚洲男人在线| 国产99精品| 六月丁香综合在线视频| 亚洲欧美日韩在线观看a三区| 国产福利一区二区三区在线播放| 伊人久久亚洲影院| 精品久久影院| 综合激情视频| 亚洲va在线| 久久精品99久久久| 国产精品美女| 日韩精品91| 国产日产一区| 久久国产高清| 91精品国产成人观看| 国产精品嫩模av在线| 免费国产亚洲视频| 1024精品一区二区三区| 久久精品一本| 日韩国产欧美三级| 亚洲激情黄色| 天堂8中文在线最新版在线| 国产美女久久| 中文字幕一区二区精品区| 99久久精品国产亚洲精品| 国产精品99精品一区二区三区∴| 视频一区中文字幕国产| 久久久久国产精品一区二区| 麻豆极品一区二区三区| 97se亚洲| 亚洲乱亚洲高清| 国精品一区二区三区| 成人三级高清视频在线看| 国产激情久久| 91精品国产一区二区在线观看| 美女精品在线| 亚洲一区久久| 成人av动漫在线观看| 成人羞羞在线观看网站| 欧美99久久| 国产亚洲一区二区手机在线观看 | 久久久久亚洲| 色婷婷综合网| 大香伊人久久精品一区二区| 国产精品久久久免费| 日韩精品欧美成人高清一区二区| 国产精品日韩久久久| 欧美日韩少妇| 国产高清一区二区| 尤物tv在线精品| 国产精品99一区二区| 99热精品久久| 国产字幕视频一区二区| 国产在线日韩| 午夜久久99| 亚洲欧美视频一区二区三区| 9色国产精品| 蜜臀av国产精品久久久久| 亚洲精品美女91| 日韩高清不卡一区| 91精品国产自产观看在线| 日本成人手机在线| 欧美精品福利| 欧美精品97| 国产精品v一区二区三区| 欧美a级一区二区| 精品五月天堂| a日韩av网址| 久久免费大视频| 午夜欧美理论片| 亚洲一区二区小说| 日韩精品中文字幕吗一区二区| 97se亚洲| 美女视频黄免费的久久| 亚洲一区资源| 激情久久中文字幕| 日本大胆欧美人术艺术动态| 亚州欧美在线| 捆绑调教美女网站视频一区| 精品精品国产三级a∨在线| 狠狠躁少妇一区二区三区| 久久精品99久久无色码中文字幕| 欧美+亚洲+精品+三区| 蜜桃av一区二区在线观看| 日韩国产精品久久久久久亚洲| 国产精品15p| 日韩欧美自拍| 亚洲专区在线| 欧美亚洲tv| 国产一区二区三区日韩精品| 日韩成人高清| 性一交一乱一区二区洋洋av| 久久激情五月婷婷| 97视频热人人精品免费| 91精品啪在线观看国产18| 国产亚洲激情| 国产精品巨作av| 久久天堂精品| 亚洲区国产区| 精品一区视频| 婷婷激情图片久久| 69精品国产久热在线观看| 91中文字幕精品永久在线| 悠悠资源网久久精品| 国产情侣久久| 久久久久99| 日欧美一区二区| 91综合网人人| 亚洲深深色噜噜狠狠爱网站| 国产精品中文字幕亚洲欧美| 日韩欧美中文| 午夜久久av| 老牛影视精品| 少妇精品在线| 国产福利片在线观看| 蜜臀av亚洲一区中文字幕| 精品99在线| 亚洲一二av| 色偷偷色偷偷色偷偷在线视频| 日韩在线播放一区二区| 国产精品99一区二区三区| 视频一区二区欧美| 国产成人免费| 综合在线一区| 97欧美在线视频| 日韩精品a在线观看91| 久久美女性网| 国产精品99久久免费|