springboot项目中,使用ProGuard 对代码进行混淆

springboot项目中,使用ProGuard 对代码进行混淆

使用maven作为构建工具 , 在build中添加如下内容

 <build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes></resource></resources><!-- maven 打包 命令 (mvn clean package) --><finalName>PianoBackstage</finalName><!-- 打包 插件 start --><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- Application 启动类配置 --><mainClass>com.ninePavilion.PianoBackstageApplication</mainClass></configuration></plugin><!-- java 混淆器插件 --><plugin><groupId>com.github.wvengen</groupId><artifactId>proguard-maven-plugin</artifactId><version>2.3.1</version><executions><execution><!-- 混淆时刻:这是在打包时的阶段 --><phase>package</phase><goals><!-- 使用插件中的什么功能:混淆 --><goal>proguard</goal></goals></execution></executions><configuration><!-- ProGuard 版本 -->
<!--                    <proguardVersion>${proguard.version}</proguardVersion>--><proguardVersion>6.2.2</proguardVersion><!-- 是否混淆 --><obfuscate>true</obfuscate><!-- 引入配置文件,这里填你的配置文件所在路径,一般你可以放在proguard.cfg所在的目录 --><proguardInclude>${project.basedir}/src/main/resources/proguard.cfg</proguardInclude><!-- 混淆时需要引用的java库,这些库的路径基本不会发生变化 --><libs><lib>${java.home}/lib/rt.jar</lib><lib>${java.home}/lib/jce.jar</lib></libs><!-- 当<injar>的值为:classes时,可以给含有该路径的作用:相关混淆需要只为指定目录下的class文件生成 --><!-- <infilter>com/marydon/**/</infilter> --><!-- 需要此选项的jar或class目录,也就是说:选择对什么东西进行加密 -->
<!--                    <injar>classes</injar>--><injar>${project.build.finalName}.jar</injar><!-- class 混淆输出的jar包,说明:这个输出出来的jar包不可用,下面会讲 -->
<!--                    <outjar>${project.build.finalName}.pd.jar</outjar>--><outjar>${project.build.finalName}.jar</outjar><!-- 输出目录 --><outputDirectory>${project.build.directory}</outputDirectory></configuration><dependencies><dependency><groupId>net.sf.proguard</groupId><artifactId>proguard-base</artifactId>
<!--                        <version>${proguard.version}</version>--><version>6.2.2</version><scope>runtime</scope></dependency></dependencies></plugin></plugins><!-- 打包插件 end --></build>

如果引入了上述内容,maven不爆红,且出现了这个信息,继续往下执行下面操作
在这里插入图片描述

2.在项目的resources 目录下,创建文件 proguard.cfg

在这里插入图片描述
内容展示

# ProGuard 配置项
# JDK目标版本:1.8
-target 1.8# 默认情况下开启 shrink,即不删除没被使用的类/成员(删除注释、未被引用代码)
-dontshrink# 忽略优化项,这里是清除字节码级别的优化(变更代码实现逻辑)
-dontoptimize# 允许混淆日志
-ignorewarnings# 保留公共类和成员
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers# 不使用大小写混合的类名
-dontusemixedcaseclassnames# 允许类合并
-allowaccessmodification# 将类名字符串如 Class.forName("className") 之类的地方进行相应替代
-adaptclassstrings# 不要删除不被引用的类,Spring Boot 项目里尽量不要删除包含
-dontnote# 设置保留所有指定的注解成员和注解参数。一个接口内的成员不使用重新的命名,如 Student类里不出现"成员"和方法名。
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod# 保留接口类(两种方式:二选一)
-keep interface * extends * { }# This option will save all original method parameters in files defined in -keep sections, otherwise all parameter names will be obfuscate.
# 保存方法参数名
-keepparameternames# 保存包目录
-keepdirectories# 保留 Spring 注解
-keepclassmembers class * {@org.springframework.beans.factory.annotation.Autowired *;
#    @org.springframework.beans.factory.annotation.Service *;@org.springframework.beans.factory.annotation.Value *;@org.springframework.web.bind.annotation.PostMapping *;@org.springframework.web.bind.annotation.GetMapping *;@org.springframework.web.bind.annotation.DeleteMapping *;@org.springframework.web.bind.annotation.RestController *;@javax.annotation.Resource *;
}# 保留类并实现接口
-keep class * implements java.io.Serializable { *; }
-keep class * implements org.springframework.boot.CommandLineRunner { *; }# 保留枚举的所有方法(三选一)
-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);
}-keepclassmembers enum * { *; }# 保留带有注解的main方法
-keep class com.ninePavilion.PianoBackstageApplication {public static void main(java.lang.String[]);
}# 保留配置类(springboot项目的需要,非常重要的配置项)
-keep @org.springframework.boot.autoconfigure.SpringBootApplication class * { *; }
-keep class  com.ninePavilion.PianoBackstageApplication { *; }
-keep class * implements org.springframework.boot.ApplicationRunner { *; }
-keepclassmembers class * {@org.springframework.beans.factory.annotation.Autowired *;
}# 保留所有包含"set"或"get"的方法名(例如shiro)会用到大量的get/set映射
# 不要删除下面的方法,自动的get和set方法的兼容
-keepclassmembers class * {public void set*();public void get*();
}# 不要混淆下面的内容,其中注释包含
#-keep class com.ninePavilion.pianoBackstage.service.* { *; }
#-keep class com.ninePavilion.pianoBackstage.controller.*# 使用注意事项 因为加密的代码很多注释很容易对有特殊写法的类不会被改动会报错导致生成报文失败 如果对自己的代码没有信心的话可以无视
# 不要大面积使用某些类出现Error无法完成混淆。
#-dontwarn *

3. 执行maven clean package 后,会出现下面的jar包

在这里插入图片描述

4. 最后,执行java -jar xxxx 看混淆后的jar包是否能够被正常执行访问

附上参考文档链接:
https://www.cnblogs.com/Marydon20170307/p/13847588.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470411.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CKS] 关闭API凭据自动挂载

目前的所有题目为2024年10月后更新的最新题库&#xff0c;考试的k8s版本为1.31.1 BackGround 安全审计发现某个Deployment有不合规的服务账号令牌&#xff0c;这可能导致安全漏洞。 Task 首先&#xff0c;修改monitoring namespace中现有的stats-monitor-sa ServiceAccount&…

zabbix监控端界面时间与服务器时间不对应

1. 修改系统时间 # tzselect Please select a continent, ocean, "coord", or "TZ".1) Africa2) Americas3) Antarctica4) Asia5) Atlantic Ocean6) Australia7) Europe8) Indian Ocean9) Pacific Ocean 10) coord - I want to use geographical coordina…

Gsensor加速度传感器数据异常及概率性卡死

关注 点赞 收藏 不错过精彩内容 大家好&#xff0c;我是硬核王同学 今天给大家分享下&#xff0c;经过三个多月解决的Gsensor加速度传感器数据异常及概率性卡死的问题。 数据异常 故事的开始是来自一位客户的投诉&#xff0c;说机器放在桌面上不去动它&#xff0c;语音就会播…

【CSS】“flex: 1“有什么用?

flex 属性的组成 flex 属性是一个复合属性&#xff0c;包含以下三个子属性&#xff1a; flex-grow&#xff1a;决定元素在容器中剩余空间的分配比例。默认值为 0&#xff0c;表示元素不会扩展。当设置为正数时&#xff0c;元素会按照设定比例扩展。flex-shrink&#xff1a;决…

【STM32】基于SPI协议读写SD,详解!

文章目录 0 前言1 SD卡的种类和简介1.1 SD卡的种类1.2 SD卡的整体结构1.3 SD卡运行机制——指令和响应2 SD卡的通信总线2.1 SDIO2.2 SPI3 硬件连接4 代码实践【重点】4.1 HAL库移植4.2 标准库移植4.3 遇到的问题和解决方案5 扩展阅读0 前言 因为项目需要,使用stm32读写sd卡,这…

软件测试面试题(800道)【附带答案】持续更新...

&#xff08;2024版&#xff09;面经 详细笔记部分展示&#xff1a; 测试基础&#xff08;102页&#xff09; Linux基础&#xff08;38页&#xff09; MySQL&#xff08;63页&#xff09; web测试&#xff08;21页&#xff09; API测试&#xff08;46页&#xff09; APP测试&…

带你掌握springboot集成SpringSecurity安全框架

前言&#xff1a; Spring Security 是 Spring 家族中的一个框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。一般来说&#xff0c;系统的安全性包括用户认证&#xff08;Authentication&#xff09;和用户授权&#xff08;Authorization&#xff09;两个部分。 认证…

【2024最新】基于springboot+vue的闲一品交易平台lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

修改yolo格式的labels类别、删除yolo格式的labels类别

1、项目中&#xff0c;数据集的类别顺序有时会改变&#xff0c;例如a项目类别1是b项目的类别3&#xff0c;&#xff0c;需要用a项目的数据集&#xff0c;只需要改类别就行&#xff0c;就不需要重新标注了&#xff0c;例如a项目的classes是 b项目的classes是 a项目的数据可以用…

Java项目实战II基于微信小程序的个人行政复议在线预约系统微信小程序(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于微信小…

Kubernetes在容器编排中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Kubernetes在容器编排中的应用 Kubernetes在容器编排中的应用 Kubernetes在容器编排中的应用 引言 Kubernetes 概述 定义与原理 …

D67【python 接口自动化学习】- python基础之数据库

day67 Python操作MySQL基础使用 学习日期&#xff1a;20241113 学习目标&#xff1a;MySQL数据库-- 136 Python操作MySQL基础使用 学习笔记&#xff1a; pymysql 创建MySQL的数据库链接 执行sql语句 总结 Python中使用第三方库&#xff1a;pymysql来操作MySQL&#xff0c;…

GitLab基于Drone搭建持续集成(CI/CD)

本文介绍了如何为 Gitee 安装 Drone 服务器。服务器打包为在 DockerHub 上分发的最小 Docker 映像。 1. 准备工作 创建OAuth应用 创建 GitLab OAuth 应用。Consumer Key 和 Consumer Secret 用于授权访问极狐GitLab 资源。 ps:授权回调 URL 必须与以下格式和路径匹配&…

python实战(八)——情感识别(多分类)

一、任务目标 本文使用的是来自Kaggle的一个情感识别数据集&#xff0c;这个数据集的总数据量是5934条&#xff0c;标签为anger、fear、joy三种情感的其中一种&#xff0c;很明显是一个多分类任务。这里&#xff0c;我们将使用微调技巧进行深度学习建模&#xff0c;同时我们会比…

【学习笔记】数据结构(七)

图 文章目录 图7.1 图的定义和术语7.2 图的存储结构7.2.1 数组表示法 - 邻接矩阵&#xff08;Adjacency Matrix)7.2.2 邻接表 -&#xff08;链式&#xff09;表示法(Adjacency List&#xff09;7.2.3 十字链表(Orthogonal List)7.2.4 邻接多重表(Adjacent MultiList) 7.3 图的遍…

scrapy爬取中信证券销售金融产品信息

import scrapyclass CsProductSpider(scrapy.Spider):name "cs_product"allowed_domains ["www.cs.ecitic.com"]start_urls ["http://www.cs.ecitic.com/newsite/cpzx/jrcpxxgs/zgcp/index.html"]def parse(self, response):# 提取数据的逻辑…

power bi中的related函数解析

在Power BI中&#xff0c;RELATED函数是一种用于检索相关表中数据的函数。它用于在一个表中检索与当前行相关联的另一个表中的数据。 销售成本 [销售数量]*related(商品表[进价])

Ollama的安装以及大模型下载教程

简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它帮助用户快速在本地运行大模型。通过简单的安装指令&#xff0c;用户可以执行一条命令就在本地运行开源大型语言模型&#xff0c; Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0c;使得用户能够快…

算法演练----24点游戏

给定4个整数&#xff0c;数字范围在1~13之间任意使用-*/&#xff08;&#xff09;&#xff0c;构造出一个表达式&#xff0c;使得最终结果为24&#xff0c; 方法一 算法分析&#xff1a;加括号和取出重复表达式 # 导入精确除法模块&#xff0c;使得在Python2中除法运算的行为更…

YUM 的使用

YUM 是一个用于 Fedora 和 Red Hat 以及 CentOS 操作系统的前端软件包管理器&#xff0c;它可以自动处理依赖关系并一次性安装所有必需的软件包。 镜像站点选择 1. 备份原有的镜像源配置文件 系统默认的 yum 镜像源配置文件存储在 /etc/yum.repos.d/ 目录下&#xff0c;可以…