如何使用Jar2Exe保护Spring Boot应用

介绍如何加密spring boot项目

介绍

一个 spring 程序被 Jar2Exe 加密后,2 个特性会失效:

  1. 任何一种component-scan都会失败:
    程序无法自动查找和实例化@Serviceor@Controller或@Mapperbean。它无法根据通配符(例如classpath:/mapper/*.xml.
  2. 任何一种@annotation都会失败:
    如@Autowired或@Value将不起作用。

解决方案

由于不兼容的spring和encryption,我们选择程序的加密部分,并保留spring部分未加密:

  • @Serviceclass:我们将服务类拆分为父类和子类:
    父类是真正的服务类,业务代码要加密。它没有注释。
    子类扩展父类,@Service自动扫描,@Autowired由 spring 注入。
  • @Mapper class:它们是接口,我们不需要加密它们。
  • mapper/xxx.xml: 有sql语句,如果要加密,需要一一显式声明。
  • @Controllerclass:通常我们不需要加密。如果我们愿意,就像@Service课堂那样做。
  • /static/并且/templates/,这些文件通过它们的名字被引用,加密兼容,如果我们想要加密。
  • /application.properties,此文件按其名称使用,加密兼容。

项目结构

为了部分加密,我们将一个spring-boot项目拆分为3个项目,请参考demo项目

  • demo-web:原始的spring-boot项目,保持未加密。@Controller和@Service课程在里面。
  • demo-core:要加密的。parent class的@Service是在这个项目。该项目是demo-web.
  • demo-share:包含@Mapper类,保持未加密。为了让@Mapper类demo-core在开发过程中可以访问,作为demo-core.

使用 Jar2Exe 加密

mvn build在父目录运行,然后我们会得到结果/demo-web/target/demo-web-0.0.1-SNAPSHOT.jar:

  1. 首先,请下载最新的 Jar2Exev2.2.4或更高版本的 v2.2,v2.5.2或更高版本的 v2.5。
  2. 解压demo-web-0.0.1-SNAPSHOT.jar,我们会得到:
demo-web-0.0.1-SNAPSHOT 
├── BOOT-INF 
│ ├── classes 
│ │ └── ……… 
│ └── lib 
│ ├── ……… 
│ ├── demo-core-0.0. 1-SNAPSHOT.jar 
│ ├── demo-share-0.0.1-SNAPSHOT.jar 
│ └── ……… 
├── META-INF 
│ ├── MANIFEST.MF 
│ └── ……… 
└── org 
    └── springframework 
        └── boot 
            └── loader 
                └── ………

因为 Jar2Exe 已经提供了一个 ClassLoader,所以我们只需要下那些文件/BOOT-INF/而忽略其他文件。
3. 将下面的内容打包/BOOT-INF/classes/成一个 zip 或 jar 文件:

cd BOOT-INF/classes/ 
jar cvf ../classes.jar *
  1. 运行 Jar2Exe:

在步骤 1 中,选择/BOOT-INF/lib/demo-core-…jar作为主 jar。
第3步,输入com.regexlab.j2e.demo.DemoWebApplication为主类,点击时忽略警告Next。
在第 4 步,我们检查Encrypt and hide.
在第 5 步,我们添加BOOT-INF/classes.jar所有BOOT-INF/lib/*文件作为依赖项。保留…/classes.jar而demo-share-…jar 不是保护。至于其他的jar文件,我们不需要启用保护,因为如果我们选择更多的jar来保护它会减慢程序的启动速度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值