场景
这边用 springboot 开发打包后得到 jar 包,要在客户机器上部署,有防反编译和绑定唯一id的需求
引入
https://gitee.com/roseboy/classfinal.git
Maven 插件方式引入
<plugin>
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<!-- 加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码,当为 # 时不加密 -->
<password>xxxx</password>
<!-- 加密的包名(可为空,多个用","分割) -->
<packages>io.renren</packages>
<!-- 配置说明文件,如果没有特殊的打包要求可以注销 cfgfiles 标签 -->
<cfgfiles>application.yml</cfgfiles>
<code>xxxx</code>
<!-- 排除的类名(可为空,多个用","分割) -->
<!-- <excludes>org.spring</excludes>-->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
打包
会看到得到一个 xxx-encrypted.jar
启动时可以看到提示需要输入密码
java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
绑定机器码
https://gitee.com/link?target=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Fnet%2Froseboy%2Fclassfinal-fatjar%2F1.2.1%2Fclassfinal-fatjar-1.2.1.jar
# 部署的机器上运行
java -jar classfinal-fatjar.jar -C
配置文件的 code 里面 配置待部署的机器上生成的 code
就能实现绑定机器码了
TODO
其实还剩下一个后台运行输入 passwd 的需求没实现,这里挺矛盾的,所以实际用的时候我没设置密码,password 那一行注释掉了,后面再填坑吧