项目是部署在客户端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获取用例!!回复 “混淆”