场景

这边用 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 那一行注释掉了,后面再填坑吧

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐