我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot项目使用proguard配置代码混淆

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot项目使用proguard配置代码混淆

springboot项目使用proguard配置代码混淆

代码混淆是一些软件开发过程中必不可少的步骤。常用的代码混淆技术有proguard maven plugin ,yguard maven plugin,procyon maven plugin,dex maven plugin .这些代码混淆技术大同小异,都是对maven打包生成class时进行干预,来完成对java字节码的代码混淆。本文以springboot项目使用proguard为例,讲一下如何使用proguard完成代码混淆。

物料准备:
1.pom引入proguard-maven-plugin插件
2.在proguard.cfg配置文件里设置具体的代码混淆配置
3.maven package 打包测试

pom.xml配置proguard插件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0modelVersion>    <groupId>cn.thinkpetgroupId>    <artifactId>springboot-app-scaffoldartifactId>    <version>0.0.1-SNAPSHOTversion>    <name>springboot-app-scaffoldname>    <description>Demo project for Spring Bootdescription>    <properties>        <java.version>1.8java.version>        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>        <spring-boot.version>2.4.2spring-boot.version>    properties>    <dependencies>        <dependency>            <groupId>cn.hutoolgroupId>            <artifactId>hutool-allartifactId>            <version>5.8.16version>        dependency>        <dependency>            <groupId>org.dom4jgroupId>            <artifactId>dom4jartifactId>            <version>2.0.0version>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-webartifactId>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-validationartifactId>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-configuration-processorartifactId>        dependency>                 <dependency>            <groupId>org.apache.cxfgroupId>            <artifactId>cxf-spring-boot-starter-jaxwsartifactId>            <version>3.2.4version>        dependency>        <dependency>            <groupId>org.projectlombokgroupId>            <artifactId>lombokartifactId>            <optional>trueoptional>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-testartifactId>            <scope>testscope>        dependency>    dependencies>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.bootgroupId>                <artifactId>spring-boot-dependenciesartifactId>                <version>${spring-boot.version}version>                <type>pomtype>                <scope>importscope>            dependency>        dependencies>    dependencyManagement>    <build>        <plugins>            <plugin>                <groupId>org.apache.maven.pluginsgroupId>                <artifactId>maven-compiler-pluginartifactId>                <version>3.8.1version>                <configuration>                    <source>1.8source>                    <target>1.8target>                    <encoding>UTF-8encoding>                configuration>            plugin>            <plugin>                <groupId>com.github.wvengengroupId>                <artifactId>proguard-maven-pluginartifactId>                <version>2.6.0version>                <executions>                    <execution>                        <phase>packagephase>                        <goals><goal>proguardgoal>                        goals>                    execution>                executions>                <configuration>                            <proguardVersion>7.2.2proguardVersion>                              <injar>${project.build.finalName}.jarinjar>                      <outjar>${project.build.finalName}.jaroutjar>                      <proguardInclude>${project.basedir}/proguard.cfgproguardInclude>                      <libs>                        <lib>${java.home}/lib/rt.jarlib>                        <lib>${java.home}/lib/jce.jarlib>                        <lib>${java.home}/lib/jsse.jarlib>                    libs>                         <outputDirectory>${project.basedir}/targetoutputDirectory>                configuration>            plugin>            <plugin>                <groupId>org.springframework.bootgroupId>                <artifactId>spring-boot-maven-pluginartifactId>                <version>${spring-boot.version}version>                <executions>                    <execution>                        <id>repackageid>                        <goals><goal>repackagegoal>                        goals>                        <configuration><mainClass>cn.thinkpet.springbootappscaffold.SpringbootAppScaffoldApplicationmainClass>                        configuration>                    execution>                executions>                <configuration>                    <addResources>trueaddResources>                configuration>            plugin>        plugins>        <resources>            <resource>                <directory>class="lazy" data-src/main/javadirectory>                <includes>                    <include>***.xmlinclude>                includes>                <filtering>falsefiltering>            resource>            <resource>                <directory>class="lazy" data-src/main/resourcesdirectory>                <includes>                    <include>***.xmlinclude>                    <include>**Dockerfileinclude>                    <include>***.xlsxinclude>                includes>                <filtering>falsefiltering>            resource>        resources>    build>project>

配置proguard.cfg文件

需要注意这个文件要配置到maven项目的根目录下
#jdk版本1.8#-target 1.8#不做收缩(不删除注释以及未被引用的代码)-dontshrink#不做优化(不变更代码实现逻辑)-dontoptimize#-dontobfuscate#-microedition#不使用大小写混合,混淆后的类名为小写-dontusemixedcaseclassnames#使用唯一的类名来混淆-useuniqueclassmembernames#允许访问并修改有修饰符的类和类的成员-allowaccessmodification#保持 包名不变-keeppackagenames#需要保持的属性:异常,内部类,注解等-keepattributes Exceptions,InnerClass,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod#spring 相关的注解,不要混淆-keepclassmembers class * {  @org.springframework.** *;  @org.springframework.beans.factory.annotation.Autowired >;  @org.springframework.beans.factory.annotation.Autowired >;  @javax.annotation.PostConstruct *;  @javax.annotation.PreDestroy *;  @javax.annotation.Resource *;  @org.springframework.scheduling.annotation.Async >;}#不混淆所有的get/set方法-keepclassmembers public class *{  void set*(***); *** get*();}-keepnames interface ** {*;}-keep interface * extends * {*;}-keepparameternames-keepclassmembers enum * {*;}# 保持启动类不变-keep public class cn.thinkpet.springbootappscaffold.SpringbootAppScaffoldApplication {*;}#不混淆被Component等注解标记的类-keep @org.springframework.stereotype.Component class * {*;}-keep @org.springframework.stereotype.Service class * {*;}-keep @org.springframework.web.bind.annotation.RestController class * {*;}-keep @org.springframework.context.annotation.Configuration class * {*;}#-keep @org.aspectj.lang.annotation.Aspect class * {*;}-adaptclassstrings#跳过非公共库的类-skipnonpubliclibraryclasses#忽略警告-ignorewarnings-dontnote# 打印配置内容-printconfiguration# 配置不混淆某些类-keep class org.slf4j.** {*;}

打包测试

执行命令

mvn clean package -DskipTests

观察控制台,等待打包完成后,看下target目录如下
在这里插入图片描述
图中的
springboot-app-springbootappscaffold-0.0.1-SNAPSHOT.jar 即为代码混淆后的jar包

proguard_map.txt里记录了jar里哪些代码被混淆了,
如Apple.class 被混淆成 a.class 这种详细的内容 ,它是依据proguard.cfg里配置的项目来进行代码混淆的。

来源地址:https://blog.csdn.net/ThinkPet/article/details/131196712

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot项目使用proguard配置代码混淆

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在vue项目中通过配置 webpack-obfuscator实现代码加密混淆

如何在vue项目中通过配置 webpack-obfuscator实现代码加密混淆?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。安装npm install --save-de
2023-06-06

springboot项目配置多个kafka的示例代码

这篇文章主要介绍了springboot项目配置多个kafka,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-17

Springboot项目中使用redis的配置方法

小编给大家分享一下Springboot项目中使用redis的配置方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!springboot是什么springboot一
2023-06-14

如何使用vue项目配置多个代理

本篇内容主要讲解“如何使用vue项目配置多个代理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用vue项目配置多个代理”吧!在Vue项目的开发过程中,为了本地调试方便,我们通常会在 vue
2023-06-20

SpringBoot项目使用mybatis-plus代码生成的实例详解

mybatis-plus是mybatis的增强,不对mybatis做任何改变,涵盖了代码生成,自定义ID生成器,快速实现CRUD,自动分页,逻辑删除等功能。本文就来讲讲SpringBoot项目如何使用mybatis-plus实现代码生成,需要的可以了解一下
2022-11-13

SpringBoot项目创建使用+配置文件+日志文件详解

Spring的出现是为了简化Java程序开发,而SpringBoot的出现是为了简化Spring程序开发,这篇文章主要介绍了SpringBoot项目创建使用+配置文件+日志文件,需要的朋友可以参考下
2023-02-09

SpringBoot项目中如何利用application.yml文件配置数据库密码加密

这篇文章主要讲解了“SpringBoot项目中如何利用application.yml文件配置数据库密码加密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot项目中如何利用ap
2023-06-08

springboot项目使用SchedulingConfigurer实现多个定时任务的案例代码

这篇文章主要介绍了springboot项目使用SchedulingConfigurer实现多个定时任务,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-05

SpringBoot使用过滤器、拦截器和监听器的案例代码(Springboot搭建java项目)

这篇文章主要介绍了SpringBoot使用过滤器、拦截器和监听器(Springboot搭建java项目),本文是基于Springboot搭建java项目,结合案例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录