当前位置: 首页 > news >正文

如何防止SpringBoot中的jar反编译?解决相关报错及踩到的坑

目录

1. 面对的场景

2. 方案

2.1 使用代码混淆

2.2 JAR包加密

3. 项目操作

4. 启动方式

5. 踩到的各种坑

5.1 java -jar xxx-0.0.1-SNAPSHOT.jar 没有主清单属性

5.2 Caused by: java.lang.IllegalArgumentException: Unrecognized option: -pwd=fxw-jar


1. 面对的场景

        最近要将项目部署到其它公司的服务器上,但是呢,又不想要将自己的源码给泄露出去,要求对正式环境的启动包进行安全性的处理,从而防止客户直接通过反编译工具将代码给反编译出来,这里有两个方案。

2. 方案

2.1 使用代码混淆

使用代码混淆工具,如ProGuard、YGuard等,对Java字节码文件进行混淆。这些工具可以通过重命名类、方法、变量等,删除注释和空格,代码优化等操作来达到混淆的效果,增加反编译的难度。

  • 使用ProGuard时,需要在项目的pom.xml文件中添加相关依赖和插件配置,然后创建一个配置文件(如proguard-rules.pro),在其中指定需要保留的类或方法,以及需要排除的类或方法。
  • 使用YGuard时,同样需要在pom.xml中添加插件配置,并创建一个yguard.xml文件来指定加密规则。

在单模块中使用此方案的话,还算是简单,但是如今的项目基本上都是多模块的,一个模块依赖多个公共的模块,这样的话,使用此方案就得不偿失了,不仅用起来比较麻烦,而且各模块之间的调用在是否混淆时也是极容易出错。

2.2 JAR包加密

        今天我们着重来讲解一下使用ClassFinal对JAR文件进行加密。ClassFinal是一款Java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译。这样实现的效果就是class文件只能看到注解、方法名和参数,方法内容被清空。

3. 项目操作

        只需要在启动类的pom.xml文件中添加如下插件即可,但是这里有一个注意点:ClassFinal插件要放在spring-boot-maven-plugin插件的后面,否则不起作用。

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.zpark.app.StudentMApplication</mainClass><skip>false</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>net.roseboy</groupId><artifactId>classfinal-maven-plugin</artifactId><version>1.2.1</version><configuration><password>fxw</password>              <!--启动密码,#为空--><excludes>org.spring</excludes><packages>${groupId}</packages>     <!--需要加密的包名,有多个使用逗号分隔--><cfgfiles>application.properties</cfgfiles>     <!--需要加密的配置文件,有多个使用逗号分隔--><libjars>hutool-all-5.8.26.jar</libjars>				<!--jar包lib目录下要加密的jar依赖,有多个使用逗号分隔--><code></code>                       <!--机器码,指定某个机器启动--></configuration><executions><execution><phase>package</phase><goals><goal>classFinal</goal></goals></execution></executions></plugin>

        当使用maven工具栏内的install之后,target目录下的xxx-encrypted.jar就是加密之后的jar包了。

4. 启动方式

无密码启动:
java -javaagent:xxxxx-encrypted.jar -jar xxxxx-encrypted.jar

有密码启动:
java -javaagent:xxxxx-encrypted.jar='-pwd 密码' -jar xxxxx-encrypted.jar

一定一定要注意:-pwd之后是空格,并不是“=”号。如果是“=”号的话会出现报错,相关报错在文章末尾给大家总结出来。

5. 踩到的各种坑

5.1 java -jar xxx-0.0.1-SNAPSHOT.jar 没有主清单属性

        相信对于习惯了在IDEA等软件内启动项目的同学来说,很少会去在cmd内启动项目。我也一样,但是今天在学习对JAR包加密时,就遇到了这个报错。

首先先来说解决方案

如果你使用的框架是SpringBoot,你要先确保有这个插件(这个会自动检测主类):

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

然后再观察标签内部如果还有内容的话,<skip>标签内一定要设置为false:

更改之后重写运行命令,成功启动项目:

为什么<skip>true</skip>会导致找不到主清单属性?

在Maven项目中,如果你使用了<skip>true</skip>配置在pom.xml文件中,这通常是用来跳过测试的。当遇到了“找不到主清单属性”的错误,这可能是因为在跳过测试的同时,一些必要的构建步骤(如生成MANIFEST.MF文件中的主类信息)没有被正确执行。因为这个插件是负责将你的项目打包成一个可以执行的JAR文件,其中包含了一个正确的清单文件等内容。

5.2 Caused by: java.lang.IllegalArgumentException: Unrecognized option: -pwd=fxw-jar

        这个报错信息的话就是之前提到的-pwd之后得是空格,而不是“=”号,我看了好多网上的资料都是写的 ‘-pwd=密码’,这样的话一运行就会发生如下报错。

相关文章:

如何防止SpringBoot中的jar反编译?解决相关报错及踩到的坑

目录 1. 面对的场景 2. 方案 2.1 使用代码混淆 2.2 JAR包加密 3. 项目操作 4. 启动方式 5. 踩到的各种坑 5.1 java -jar xxx-0.0.1-SNAPSHOT.jar 没有主清单属性 5.2 Caused by: java.lang.IllegalArgumentException: Unrecognized option: -pwdfxw-jar 1. 面对的场景…...

Axios 基本使用

Axios 是一个异步请求技术,核心作用就是用来在页面中发送异步请求,并获取对应数据在页面中渲染 页面局部更新技术 Ajax 中文网站:https://www.kancloud.cn/yunye/axios/234845 安装: <script src"https://unpkg.com/axios/dist/axios.min.js"></script&g…...

前端大佬都在用的actionDelegationMiddleware究竟有多香?

作为一个前端开发者,我深知跨组件通信的痛点。今天,我要和大家分享一个让我眼前一亮的工具 - alovajs 的 actionDelegationMiddleware。这个中间件简直就是跨组件通信的得力助手!它让我们可以在任意组件中触发其他组件的请求操作,解决了很多麻烦。用了它之后,我感觉整个项目的架…...

解决k8s集群中安装ks3.4.1开启日志失败问题

问题 安装kubesphere v3.4.1时&#xff0c;开启了日志功能&#xff0c;部署时有三个pod报错了 Failed to pull image “busybox:latest”: rpc error: code Unknown desc failed to pull and unpack image “docker.io/library/busybox:latest”: failed to copy: httpRead…...

Qml-Item的Id生效范围

Qml-Item的Id生效范围 前置声明 本实例在Qt6.5版本中做的验证同一个qml文件中&#xff0c;id是唯一的&#xff0c;即不同有两个相同id 的Item;当前qml文件中声明的id在当前文件中有效&#xff08;即如果其它组件中传入的id&#xff0c;与当前qml文件中id 相同&#xff0c;当前…...

【配色网站分享】

个人比较喜欢收藏一些好看的插画、UI设计图和配色&#xff0c;于是有了此篇&#xff0c;推荐一些配色网站&#xff0c;希望能对自己和大家有些帮助。 1.uiGradients 一个主打渐变风网站&#xff0c;还可以直接复制颜色。 左上角的“show all gradients”可以查看一些预设的渐…...

【记录】Android|安卓平板 猫游戏(四款,peppy cat,含下载教程和链接)

前言 网上大部分直接找到的都是 iPad 的猫游戏&#xff0c;安卓的要查英文才找得到&#xff0c;但质量也都一般&#xff0c;或不知道在哪里下载。 遂自己找。 下载测试时间&#xff1a;2024/10/20 文章目录 前言1 检索2 亲测2.1 ✅⭐⭐⭐⭐⭐Cat Alone 1 and 22.2 &#x1f4…...

微前端架构及其解决方案对比

微前端架构及其解决方案对比 微前端架构是一种通过将大型前端应用拆分为多个独立的、可单独部署的小型应用的设计模式。随着这种模式的流行&#xff0c;诞生了多种微前端实现方案&#xff0c;每个方案都有其独特的特点和适用场景。以下是常见的微前端解决方案及其优缺点对比&a…...

git add操作,文件数量太多卡咋办呢,

git add介绍 Git的add命令是用于将文件或目录添加到暂存区&#xff08;也就是索引库&#xff09;&#xff0c;以便在后续的提交&#xff08;commit&#xff09;操作中一并上传到版本库的。具体来说&#xff0c;git add命令有以下几种常见用法&#xff1a; 添加单个文件&#…...

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…...

Spring Boot 核心理解-自动装配

自动装配 spring boot的自动装配&#xff08;auto configuration&#xff09;是通过spring framework的依赖注入&#xff08;dependency injection, DI&#xff09;和配置类的组合来实现的。 spring boot 的自动装配机制可以简化应用的配置过程&#xff0c;是开发者不再需要手…...

go 中指针的执行效率比较

package main import ("fmt""time" ) type Books struct {title stringauthor stringsubject stringbook_id int } func main() {start : time.Now() // 记录开始时间var Book1 Books /* 声明 Book1 为 Books 类型 */var Book2 Books /* 声明…...

单链表的经典算法OJ

目录 1.反转链表 2.链表的中间节点 3.移除链表元素 ——————————————————————————————————————————— 正文开始 1.反转链表 typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListNode* head) {//判空if(…...

视频网站开发:Spring Boot框架的高效实现

5 系统实现 5.1用户信息管理 管理员管理用户信息&#xff0c;可以添加&#xff0c;修改&#xff0c;删除用户信息信息。下图就是用户信息管理页面。 图5.1 用户信息管理页面 5.2 视频分享管理 管理员管理视频分享&#xff0c;可以添加&#xff0c;修改&#xff0c;删除视频分…...

【前端】如何制作一个自己的网站(11)

接上文。 除了前面的颜色样式外&#xff0c;字体样式和文本样式也是网页设计中的重要组成部分。 合适的字体和文本排版&#xff0c;不仅可以使页面更加美观&#xff0c;也可以提升用户体验。接下来&#xff0c;我们先来看看CSS如何设置字体样式。 字体样式 同时设置了字体样…...

【Conda】提高 Conda 下载速度与兼容性的完美指南

这里写目录标题 引言1. Conda 官方源1.1 常用官方源1.2 源的选择1.3 源的作用 2. 设置 Conda 源2.1 查看当前配置2.2 添加新的源2.3 设置源的优先级2.4 移除源2.5 示例&#xff1a;设置使用 conda-forge 3. 使用中国镜像源3.1 常用中国镜像源3.2 设置中国镜像源3.3 验证镜像源设…...

【Flutter】页面布局:层叠布局(Stack、Positioned)

在 Flutter 中&#xff0c;布局系统提供了多种方式来管理 UI 元素的排列方式。其中&#xff0c;Stack 和 Positioned 是非常重要的布局组件&#xff0c;允许开发者将子组件按层叠方式&#xff08;即堆叠&#xff09;布局&#xff0c;使得组件可以相互重叠。通过使用 Stack 和 P…...

SpringBoot实现的汽车票在线预订系统

2相关技术 2.1 MySQL 数据库 MySQL 是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非…...

集合框架14:TreeSet概述、TreeSet使用、Comparator接口及举例

视频链接&#xff1a;13.29 TreeSet概述_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p29 1、TreeSet概述 基于排列顺序实现元素不重复&#xff1b;实现了Sort…...

uniapp获取底部导航tabbar的高度(H5)

uniapp获取底部导航tabbar的高度&#xff08;H5&#xff09; <view :style"bottom: tabBarHeight px;"> </view>tabBarHeight: 0, // 底部tabBar高度&#xff0c; h5// #ifdef H5 getTabBarHeight(){const systemInfo uni.getSystemInfoSync()this.t…...

如何在5分钟内搭建专属的Zwift离线训练服务器:完整指南

如何在5分钟内搭建专属的Zwift离线训练服务器&#xff1a;完整指南 【免费下载链接】zwift-offline Use Zwift offline 项目地址: https://gitcode.com/gh_mirrors/zw/zwift-offline 厌倦了网络不稳定导致的虚拟骑行中断&#xff1f;想要在任何地方都能享受流畅的Zwift训…...

CHORD-X视觉战术指挥系统固件升级方案:远程安全更新边缘设备

CHORD-X视觉战术指挥系统固件升级方案&#xff1a;远程安全更新边缘设备 最近和几个做边缘计算设备的朋友聊天&#xff0c;大家普遍头疼一个问题&#xff1a;设备一旦部署出去&#xff0c;特别是像智能摄像头、单兵终端这类在户外或复杂环境下的设备&#xff0c;后续的固件更新…...

Qwen3Guard安全模型HTTPS部署:保姆级Nginx反向代理配置指南

Qwen3Guard安全模型HTTPS部署&#xff1a;保姆级Nginx反向代理配置指南 1. 引言 1.1 为什么需要HTTPS部署 在当今数字化环境中&#xff0c;内容安全审核已成为各类在线平台的基础需求。Qwen3Guard作为阿里开源的安全审核模型&#xff0c;能够有效识别和过滤不安全内容。然而…...

霍里思特获2亿融资,矿业分选新势力崛起?

硬氪消息&#xff0c;矿石AI智能分选设备企业霍里思特完成近2亿元C轮融资&#xff0c;由招商局资本领投。该公司技术实力强&#xff0c;产品优势明显&#xff0c;市场表现佳&#xff0c;未来发展值得关注。融资情况与用途霍里思特完成近2亿元C轮融资&#xff0c;由招商局资本领…...

大模型学习笔记------SAM模型架构拆解与实战指引

1. SAM模型架构全景拆解 第一次看到SAM模型时&#xff0c;就像拿到了一台精密的瑞士手表——外表简洁但内部构造复杂。这个由Meta提出的"分割一切"模型&#xff0c;确实改变了计算机视觉领域的游戏规则。想象一下&#xff0c;你只需要在图片上随便点几个点&#xff0…...

Nano-Banana模型安全防护:对抗样本检测与防御

Nano-Banana模型安全防护&#xff1a;对抗样本检测与防御 在AI模型日益普及的今天&#xff0c;安全性已成为不可忽视的核心议题。Nano-Banana模型通过引入先进的对抗样本检测与防御机制&#xff0c;在鲁棒性上实现了显著突破&#xff0c;有效提升了模型在复杂环境下的可靠性。…...

【Docker】在Ubuntu22.04上安装Docker

目录 一.Docker版本 二.在Ubuntu22.04上安装Docker-CE 2.1.卸载旧版本&#xff08;如果有的话&#xff09; 2.2.配置docker下载源 2.3.安装Docker-CE 2.4.实战经验 2.4.1.Docker镜像源修改 2.4.2.Docker 目录修改 一.Docker版本 在 Docker 的发展与演进过程中&#xf…...

OpenClaw配置备份指南:gemma-3-12b-it模型迁移与快速恢复

OpenClaw配置备份指南&#xff1a;gemma-3-12b-it模型迁移与快速恢复 1. 为什么需要备份OpenClaw配置&#xff1f; 上周我的主力开发机突然硬盘故障&#xff0c;导致精心调校的OpenClaw配置全部丢失。整整两天时间&#xff0c;我都在重新配置模型参数、飞书通道和自定义技能—…...

OpenClaw+Phi-3-vision-128k-instruct:智能相册的自动化分类与标签系统

OpenClawPhi-3-vision-128k-instruct&#xff1a;智能相册的自动化分类与标签系统 1. 为什么需要智能相册管理 作为一个摄影爱好者&#xff0c;我的照片库在过去十年里积累了超过5万张照片。每次想找某张特定场景的照片时&#xff0c;都要花费大量时间翻找文件夹。更糟糕的是…...

Claude Code 接入 DeepSeek、GLM、MiniMax 等国产大模型,手把手带你起飞!

每天免费领 1亿 Token&#xff0c;白嫖DeepSeek、GLM、MiniMax、Kimi等大模型&#xff01; 这篇文章是专门写给那些想撸起袖子直接开干的朋友们的。咱们不整那些虚头巴脑的理论&#xff0c;核心就帮大家解决四件事&#xff1a;搞定 Claude Code 的安装、确认这玩意儿能跑通、成…...