记录下 java + Xjar部署问题
- Xjar
- Xjar是什么?
- 静态资源问题处理
项目是部署在客户端springboot项目,打包jar后静态资源都范文异常 net::ERR_CONTENT_LENGTH_MISMATCH 200
Xjar
Xjar是什么?
无需侵入代码,只需要把编译好的JAR包通过工具加密即可。
完全内存解密,杜绝源码以及字节码泄露或反编译。
支持所有JDK内置加解密算法。
可选择需要加解密的字节码或其他资源文件,避免计算资源浪费。
项目引用的是旧版本:v2.0.x
Xjar - GITHUB
静态资源问题处理
下面是官网给出的介绍:
静态文件浏览器无法加载完成问题:
由于静态文件被加密后文件体积变大,Spring Boot 会采用文件的大小作为 Content-Length 头返回给浏览器, 但实际上通过 XJar 加载解密后文件大小恢复了原本的大小,所以浏览器认为还没接收完导致一直等待服务端。 由此我们需要在加密时忽略静态文件的加密,实际上静态文件也没加密的必要,因为即便加密了用户在浏览器 查看源代码也是能看到完整的源码的。通常情况下静态文件都会放在 static/ 和 META-INF/resources/ 目录下, 我们只需要在加密时通过过滤器排除这些资源即可,可以采用以下的过滤器:
XKit.not(XKit.or().mix(new XJarAntEntryFilter("static/**")).mix(new XJarAntEntryFilter("META-INF/resources/**"))
);
maven插件处理方式:
<plugin><groupId>com.github.core-lib</groupId><artifactId>xjar-maven-plugin</artifactId><version>v2.0.5</version><executions><execution><goals><goal>build</goal></goals><phase>package</phase><!-- 或使用<phase>install</phase>--><configuration><password>io.xjar</password><excludes><exclude>static/**</exclude><exclude>META-INF/resources/**</exclude></excludes></configuration></execution></executions>
</plugin>
如果是代码方式则把过滤器就到 XBoot.encrypt 中:如图
// Spring-Boot Jar包加密String password = "123456;XKey xKey = XKit.key(password);//XEntryFilter not = XKit.not(XKit.or().mix(new XJarAntEntryFilter("static/**")).mix(new XJarAntEntryFilter("META-INF/resources/**")));XBoot.encrypt("path/input/jar", "path/out/jar", xKey, XConstants.MODE_DANGER,not);
到此新的jar可以正常加载出静态资源里面的页面内容了!!
关于 xjar + proguard 双重防护代码反编译风险可以浏览下面文章
《Java + proguard 代码混淆》
《Java + Xjar + proguard 双重加密提高反编译泄露风险》
添加GZ获取用例!!回复 “混淆”