Springboot3.5.6 + jdk21使用第三方xjar加密
我自己尝试打包的环境
jdk21
springboot3.5.6
golang: 1.19.13
大佬的开源仓库地址
https://github.com/kongweiguang/xjar-plus
直接clone下来, 使用idea打开
新建一个测试
测试类代码:
import io.xjar.XCryptos;
import io.xjar.XGo;
import io.xjar.XKit;
import io.xjar.key.XKey;public class MyTest {public static void main(String[] args) throws Exception {// 加密jar包XCryptos.encryption()//原始jar.from("C:\\Users\\Frk\\Downloads\\xjar-plus-master\\gszy2group-0.0.1-SNAPSHOT.jar")//密码.password("123456")//执行jar参数 最后执行结果是( java 自定义参数 -jar app.jar)//建议加上-XX:+DisableAttachMechanism 不然可以使用agent获取jvm运行时的class信息进行反编译(通过类似arthas的工具实现).jarArgs("-XX:+DisableAttachMechanism --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED")//jdk的zip包地址(需要放到目标机器执行的jdk版本,一般是linux下的jdk),注意:jdk的zip包不能有多层目录,只能是jdk的根目录.jdkZip("C:\\Users\\Frk\\Downloads\\xjar-plus-master\\ms-21.0.8.zip")//需要加密路径.include("cn/beitayun/*").include("/**.yml")//需要排除路径.exclude("/static/**/*")//构建机器上的golang的路径(运行的机器上不需要go环境).goPath("C:\\Users\\Frk\\sdk\\go1.19.13\\bin")//是否打包为linux可执行文件
// .pkgLinux()//(格式必须是yyyy-MM-dd HH:mm:ss)启动器有效期时间,简单判断时间,如果宿主机修改机器时间就没办法了,推荐网络校验.validStartDate("2025-10-20 00:00:00").validEndDate("2025-10-20 16:25:00")//生成license文件内的code,如果有license文件,// 会校验license中的code和启动器重的code一致,// 否则会认为这个license文件不是这个启动器的,// 不填默认生成uuid// 建议每一个应用一个code.code("654321")//打包后文件存放目标路径.to("C:\\Users\\Frk\\IdeaProjects\\beitayun-g2\\target", "bala.jar");// ------------------------------------------------------------------------------------// 单独生成license文件,只要保证密码和code一致,即可修改启动器的启动参数和有效期XKey key = XKit.key("123456");XGo.license("C:\\Users\\Frk\\IdeaProjects\\beitayun-g2\\target",key,"-Xms512m -Xmx1024m -Dserver.port=8083","654321","2025-10-20 16:20:00","2025-10-20 16:30:00");}
}
一个一个参数解释
第一个from原始jar包路径, 使用绝对地址就好了
password, 就是密码, 这个看自己
jarArgs, 这个不要动大佬的参数
jdkZip, 进入到jdk文件夹路径, 能看到bin路径的这一层, 选择所有文件一起压缩
include, 加密路径
goPath, 这个没啥说的, go语言sdk的位置
validStartDate, 开始生效时间
validEndDate, 失效时间
code, 这个每个应用一个, 用来和后面的license文件关联的
---------------------------------------------------
可以看到代码分成了两段, 开头的一段是对jar包进行加密的设置
后一段是用来生成license文件的
你的jar包设置过期时间到期了
只需要单独运行第二段代码, 生成新的合法license文件
将合法license文件发送给对方, 放到加密后的exe文件同目录就可以
不过这个过期时间是本地事件, 容易被更改