网站用户界面ui设计细节,门户网站 移动端,中铁建设集团董事长,wordpress模版使用教程1场景
最近项目要求部署到其他公司的服务器上#xff0c;但是又不想将源码泄露出去。要求对正式环境的启动包进行安全性处理#xff0c;防止客户直接通过反编译工具将代码反编译出来。
2方案 第一种方案使用代码混淆 采用proguard-maven-plugin插件
在单模块中此方案还算简…1场景
最近项目要求部署到其他公司的服务器上但是又不想将源码泄露出去。要求对正式环境的启动包进行安全性处理防止客户直接通过反编译工具将代码反编译出来。
2方案 第一种方案使用代码混淆 采用proguard-maven-plugin插件
在单模块中此方案还算简单但是现在项目一般都是多模块一个模块依赖多个公共模块。那么使用此方案就比较麻烦配置复杂文档难懂各模块之间的调用在是否混淆时极其容易出错。 第二种方案使用代码加密 采用classfinal-maven-plugin插件
此方案比对上面的方案来说就简单了许多。直接配置一个插件就可以实现源码的安全性保护。并且可以对yml、properties配置文件以及lib目录下的maven依赖进行加密处理。若想指定机器启动支持绑定机器项目加密后只能在特定机器运行。
ClassFinal项目源码地址[1]
3项目操作
只需要在启动类的pom.xml文件中加如下插件即可需要注意的是改插件时要放到spring-boot-maven-plugin插件后面否则不起作用。
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/pluginplugin!--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--groupIdnet.roseboy/groupIdartifactIdclassfinal-maven-plugin/artifactIdversion1.2.1/versionconfigurationpassword#/password!-- #表示启动时不需要密码,事实上对于代码混淆来说,这个密码没什么用,它只是一个启动密码 --excludesorg.spring/excludespackages${groupId}/packages!-- 加密的包名,多个包用逗号分开 --cfgfilesapplication.yml,application-dev.yml/cfgfiles!-- 加密的配置文件,多个包用逗号分开 --libjarshutool-all.jar/libjars !-- jar包lib下面要加密的jar依赖文件,多个包用逗号分开 --codexxxx/code !-- 指定机器启动,机器码 --/configurationexecutionsexecutionphasepackage/phasegoalsgoalclassFinal/goal/goals/execution/executions/plugin/plugins
/build4启动方式
无密码启动
java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar有密码启动
java -javaagent:xxx-encrypted.jar-pwd密码 -jar xxx-encrypted.jar5反编译效果
启动包加密之后方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描
反编译只能看到方法名和注解,看不到方法体的具体内容
启动过程中解密class,完全内存解密,不留下任何解密后的文件
yml配置文件留下空白
6绑定机器启动
下载到classfinal-fatjar-1.2.1.jar[2]依赖在当前依赖下cmd执行java -jar classfinal-fatjar-1.2.1.jar -C命令会自动生成一串机器码 将此生成好的机器码放到maven插件中的code里面即可。这样打包好的项目只能在生成机器码的机器运行其他机器则启动不了项目。