Spring Boot集成xjar快速入门Demo

1.什么是xjar?

Spring Boot JAR 安全加密运行工具, 同时支持的原生JAR.

基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动, 动态解密运行的方案, 避免源码泄露以及反编译.

功能特性

  • 无代码侵入, 只需要把编译好的JAR包通过工具加密即可.
  • 完全内存解密, 降低源码以及字节码泄露或反编译的风险.
  • 支持所有JDK内置加解密算法.
  • 可选择需要加解密的字节码或其他资源文件.
  • 支持Maven插件, 加密更加便捷.
  • 动态生成Go启动器, 保护密码不泄露.

2.环境准备

mac更新brew,并安装go

sql 复制代码
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow

更新

sql 复制代码
brew update

安装go

go 复制代码
brew install go

检查go版本

go 复制代码
go version

3.代码工程

实验目标

使用xjar 加密spring boot jar包

第一种方法采用maven插件

xml 复制代码
<build>
    <plugins>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.github.core-lib</groupId>
            <artifactId>xjar-maven-plugin</artifactId>
            <version>4.0.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>build</goal>
                    </goals>
                    <!--yoou can change install-->
                    <phase>package</phase>
                    <configuration>
                        <password>xxxx</password>
                        <!-- need enc resources -->
                        <includes>         
                            <include>com/et/**</include>
                            <include>mapper/*Mapper.xml</include>
                            <include>config/**</include>
                        </includes>
                        <!-- no need enc resources -->
                        <excludes>
                            <exclude>static/**</exclude>
                            <exclude>META-INF/**</exclude>
                        </excludes>
                        <!--target jar dir -->
                        <targetDir>${project.build.directory}\xJarDir\</targetDir>
                        <!-- target jar name -->
                        <targetJar>zsplat.jar</targetJar>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

对于

Spring Boot 项目或模块, 该插件要后于 spring-boot-maven-plugin 插件执行, 有两种方式:

  • 将插件放置于 spring-boot-maven-plugin 的后面, 因为其插件的默认 phase 也是 package
  • 将插件的 phase 设置为 install(默认值为:package), 打包命令采用 mvn clean install

也可以通过Maven命令执行

ini 复制代码
mvn xjar:build -Dxjar.password=io.xjar
mvn xjar:build -Dxjar.password=io.xjar -Dxjar.targetDir=/directory/to/save/target.xjar

但通常情况下是让XJar插件绑定到指定的phase中自动执行, 这样就能在项目构建的时候自动构建出加密的包.

ini 复制代码
mvn clean package -Dxjar.password=io.xjar
mvn clean install -Dxjar.password=io.xjar -Dxjar.targetDir=/directory/to/save/target.xjar

强烈建议

强烈建议不要在 pom.xml 的 xjar-maven-plugin 配置中写上密码,这样会导致打包出来的 xjar 包中的 pom.xml 文件保留着密码,极其容易暴露密码!强烈推荐通过 mvn 命令来指定加密密钥!

第二种方式代码加密

1.引入jar

xml 复制代码
<project>
 <!-- 设置 jitpack.io 仓库 -->
 <repositories>
 <repository>
 <id>jitpack.io</id>
 <url>https://jitpack.io</url>
 </repository>
 </repositories>
 <!-- 添加 XJar 依赖 -->
 <dependencies>
 <dependency>
 <groupId>com.github.core-lib</groupId>
 <artifactId>xjar</artifactId>
 <version>4.0.2</version>
 <!-- <scope>test</scope> -->
 </dependency>
 </dependencies>
</project>
  • 必须添加 jitpack.io Maven仓库.
  • 如果使用 JUnit 测试类来运行加密可以将 XJar 依赖的 scope 设置为 test.

2. 加密源码

java 复制代码
package com.et.xjar;

import io.xjar.XCryptos;

public class JarEncryptio {
    public static void main(String[] args) throws Exception {
        // Spring-Boot Jar包加密
        XCryptos.encryption()
                .from("/Users/liuhaihua/IdeaProjects/springboot-demo/xjar/target/xjar-1.0-SNAPSHOT.jar")
                .use("passwad")
                .exclude("/static/**/*")
                .exclude("/templates/**/*")
                .exclude("/META-INF/resources/**/*")
                .to("/Users/liuhaihua/IdeaProjects/springboot-demo/xjar/target/xJarDir/xjar-encryption.jar");
        System.out.println("success");
    }
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

4.测试

加密

1.maven执行

go 复制代码
mvn clean package

2.运行Java代码执行main方法加密

编译不同平台的启动器

将 xjar.go 在不同的平台进行编译即可得到不同平台的启动器可执行文件, 其中Windows下文件名为 xjar.exe 而Linux下为 xjar

go 复制代码
go build xjar.go

运行

运行环境只需要有java环境即可

csharp 复制代码
./xjar java --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 -jar xjar-encryption.jar

5.引用

相关推荐
Java旅途几秒前
让项目过程清晰可追溯:从课题双选到文档归档的一体化平台
后端
黄连木笛2 分钟前
不改 Redis Insight 原有代码,把它汉化了:DOM 整段匹配 + XHR 拦截 + asar 重打包
redis·后端
flash俊杰3 分钟前
v2.34-02 静默截断:10,000 个会话与 500 条消息是怎么被发现的
后端
vaskilab12 分钟前
Agent 上线后翻车的 6 种死法:一个 20 万人规模项目的四版重构实录
后端
文丑颜不良啊13 分钟前
LeetCode2901~2920题目解析
java·leetcode
码云社区15 分钟前
能碳管理系统开发要关注什么?能源数据、统计口径与AI分析的衔接
java·人工智能·ai·能源·能源管理系统·能碳管理系统·能碳管理系统源码
Flynn Liang35 分钟前
Agentic 工作流:子代理、Supervisor 与人工介入
java·langchain·多智能体·supervisor·agentic·langchain4j
鶴哥只手遮天36 分钟前
《rustc 内幕》第 1 章 全景:rustc 编译流水线与 crate 版图
后端·rust·开源
xys_67839 分钟前
JavaSE通关手册:运算符
java·java-ee
小荷才露尖尖角,早有蜻蜓立上头1 小时前
SpringBoot+QQ邮箱发送邮件
spring boot