代码拉取完成,页面将自动刷新
同步操作将从 杨昌沛/xjar 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
GitHub: https://github.com/core-lib/xjar
JDK 1.7 +
<project>
<!-- 设置 jitpack.io 仓库 -->
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://www.jitpack.io</url>
</repository>
</repositories>
<!-- 添加 XJar 依赖 -->
<dependencies>
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>LATEST_VERSION</version>
</dependency>
</dependencies>
</project>
// Spring-Boot Jar包加密
String password = "io.xjar";
XBoot.encrypt("/path/to/read/plaintext.jar", "/path/to/save/encrypted.jar", password);
// Spring-Boot Jar包解密
String password = "io.xjar";
XBoot.decrypt("/path/to/read/encrypted.jar", "/path/to/save/decrypted.jar", password);
// Jar包加密
String password = "io.xjar";
XJar.encrypt("/path/to/read/plaintext.jar", "/path/to/save/encrypted.jar", password);
// Jar包解密
String password = "io.xjar";
XJar.decrypt("/path/to/read/encrypted.jar", "/path/to/save/decrypted.jar", password);
// 命令行运行JAR 然后在提示输入密码的时候输入密码后按回车即可正常启动
java -jar /path/to/encrypted.jar
// 也可以通过传参的方式直接启动,不太推荐这种方式,因为泄露的可能性更大!
java -jar /path/to/encrypted.jar --xjar.password=PASSWORD
默认情况下,即没有提供过滤器的时候,对于Spring Boot JAR包只加密本项目即 BOOT-INF/classes/ 下的资源, 而对于普通JAR则除了META-INF/MANIFEST.MF 之外的所有资源。 框架提供使用过滤器的方式来灵活指定需要加密的资源或排除不需要加密的资源。
// 对于Spring Boot JAR,只加密自身项目及相关模块的源码不加密第三方依赖,可以通过XEntryFilter来指定需要加密的JAR包内资源。
XBoot.encrypt(
"/path/to/read/plaintext.jar",
"/path/to/save/encrypted.jar",
"io.xjar",
(entry) -> {
String name = entry.getName();
return name.startsWith("BOOT-INF/classes/") || name.startsWith("BOOT-INF/lib/io-xjar-");
}
);
// 1. 采用Ant表达式过滤器更简洁地来指定需要加密的资源。
XBoot.encrypt(plaintext, encrypted, password, new XJarAntEntryFilter("BOOT-INF/classes/**"));
XBoot.encrypt(plaintext, encrypted, password, new XJarAntEntryFilter("BOOT-INF/lib/io-xjar-*.jar"));
XBoot.encrypt(plaintext, encrypted, password, new XJarAntEntryFilter("BOOT-INF/lib/io-xjar-???.jar"));
// 2. 采用更精确的正则表达式过滤器。
XBoot.encrypt(plaintext, encrypted, password, new XJarRegexEntryFilter("BOOT-INF/classes/.+?"));
XBoot.encrypt(plaintext, encrypted, password, new XJarRegexEntryFilter("BOOT-INF/lib/io-xjar-.+?.jar"));
XBoot.encrypt(plaintext, encrypted, password, new XJarRegexEntryFilter("BOOT-INF/lib/io-xjar-\\w{3}.jar"));
当过滤器的逻辑复杂或条件较多时可以将过滤器分成多个,并且使用 XKit 工具类提供的多个过滤器混合方法混合成一个,XKit 提供 “与” “或” “非” 三种逻辑运算的混合。
// 1. 与运算,即所有过滤器都满足的情况下才满足,mix() 方法返回的是this,可以继续拼接。
XEntryFilter and = XKit.and()
.mix(new XJarAntEntryFilter("BOOT-INF/classes/**"))
.mix(new XJarAntEntryFilter("BOOT-INF/lib/io-xjar-*.jar"));
XEntryFilter all = XKit.all()
.mix(new XJarAntEntryFilter("BOOT-INF/classes/**"))
.mix(new XJarAntEntryFilter("BOOT-INF/lib/io-xjar-*.jar"));
// 2. 或运算,即任意一个过滤器满足的情况下就满足,mix() 方法返回的是this,可以继续拼接。
XEntryFilter or = XKit.or()
.mix(new XJarAntEntryFilter("BOOT-INF/classes/**"))
.mix(new XJarAntEntryFilter("BOOT-INF/lib/io-xjar-*.jar"));
XEntryFilter any = XKit.any()
.mix(new XJarAntEntryFilter("BOOT-INF/classes/**"))
.mix(new XJarAntEntryFilter("BOOT-INF/lib/io-xjar-*.jar"));
// 3. 非运算,即除此之外都满足。该例子中即表示除了满足 BOOT-INF/classes/** 和 BOOT-INF/lib/io-xjar-*.jar 之外的资源,
// 也就是非项目相关的资源,其实没有意义只是举个例子,因为我们自己的资源才需要加密对吧。
XEntryFilter not = XKit.not(and);
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 需要将executable和embeddedLaunchScript参数删除,目前还不能支持对该模式Jar的加密!后面将会支持该方式的打包。
<configuration>
<executable>true</executable>
<embeddedLaunchScript>...</embeddedLaunchScript>
</configuration>
-->
</plugin>
如果项目中使用了 JPA 且实现为Hibernate时,由于Hibernate自己解析加密后的Jar文件,所以无法正常启动, 可以采用以下解决方案
XJar-Maven-Plugin GitHub: https://github.com/core-lib/xjar-maven-plugin
<project>
<!-- 设置 jitpack.io 插件仓库 -->
<pluginRepositories>
<pluginRepository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</pluginRepository>
</pluginRepositories>
<!-- 添加 XJar Maven 插件 -->
<build>
<plugins>
<plugin>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar-maven-plugin</artifactId>
<version>LATEST_VERSION</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
<phase>package</phase>
<!-- 或使用
<phase>install</phase>
-->
<configuration>
<password>io.xjar</password>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
mvn xjar:build -Dxjar.password=io.xjar
mvn xjar:build -Dxjar.password=io.xjar -Dxjar.targetDir=/directory/to/save/target.xjar
参数名称 | 命令参数名称 | 参数说明 | 参数类型 | 缺省值 | 示例值 |
---|---|---|---|---|---|
password | -Dxjar.password | 密码字符串 | String | 必须 | 任意字符串,io.xjar |
algorithm | -Dxjar.algorithm | 加密算法名称 | String | AES | JDK内置加密算法,如:AES / DES |
keySize | -Dxjar.keySize | 密钥长度 | int | 128 | 根据加密算法而定,56,128,256 |
ivSize | -Dxjar.ivSize | 密钥向量长度 | int | 128 | 根据加密算法而定,128 |
sourceDir | -Dxjar.sourceDir | 源jar所在目录 | File | ${project.build.directory} | 文件目录 |
sourceJar | -Dxjar.sourceJar | 源jar名称 | String | ${project.build.finalName}.jar | 文件名称 |
targetDir | -Dxjar.targetDir | 目标jar存放目录 | File | ${project.build.directory} | 文件目录 |
targetJar | -Dxjar.targetJar | 目标jar名称 | String | ${project.build.finalName}.xjar | 文件名称 |
includes | -Dxjar.includes | 需要加密的包内资源 | String[] | 无 | BOOT-INF/classes/** , BOOT-INF/lib/xjar-*.jar , 支持Ant表达式 |
excludes | -Dxjar.excludes | 无需加密的包内资源 | String[] | 无 | BOOT-INF/classes/** , BOOT-INF/lib/xjar-*.jar , 支持Ant表达式 |
当 includes 和 excludes 同时使用是,excludes 将会失效!更多文档请点击:XJar-Maven-Plugin
QQ 646742615 不会钓鱼的兔子
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。