这是我见过最强的Java版内网穿透神器!

专属Java面试小册/一对一提问/简历修改/求职指南/学习打卡,欢迎加入 JavaGuide 官方知识星球 (认真维护接近四年,限时优惠中)。


JavaGuide 官方网站javaguide.cn

你好,这是 JavaGuide 的「优质 Java 开源项目推荐」第 23 期,距离上一期发布已经过去 3 个月了。8 月、9 月和10月都忘记发布了,后续还是尽量保证每月一期,每一期都会精选 5 个高质量的 Java 开源项目。

本期项目概览:

  • NeutrinoProxy:内网穿透神器
  • Binlog4j:轻量级 Binlog 客户端
  • Stirling-PDF:PDF 工具箱
  • jasypt-spring-boot:Spring Boot 的 Jasypt 集成
  • wms-ruoyi:基于若依的 wms 仓库管理系统

NeutrinoProxy:内网穿透神器

项目介绍

  • 一款基于 Netty + Solon + MybatisPlus 的内网穿透神器,可以用于本地开发调试第三方回调、将本地服务映射到外网、本地开发异地接口连调等场景。
  • 支持流量监控、Docker 一键部署、SSL 加密、多种协议。
  • 遵循 MIT 许可,可以用于任何个人或商业行为。

效果展示

管理后台首页

系统管理

端口映射

本地原生启动

相关地址

  • 项目地址:https://gitee.com/dromara/neutrino-proxy
  • 官网:https://neutrino-proxy.dromara.org

Binlog4j:轻量级 Binlog 客户端

项目介绍

  • 轻量级 MySQL Binlog 客户端,支持监听各种 binlog 事件,支持集群模式。
  • 为了防止宕机期间的数据丢失,使用 Redis 保存 binlog 消费记录, 从而在下次启动时实现续读。

使用效果

对于传统项目,可以使用下面的依赖:

<dependency>
   <groupId>com.gitee.Jmysy</groupId>
   <artifactId>binlog4j-core</artifactId>
   <version>latest.version</version>
</dependency>

通过 BinlogClient 创建 binlog 客户端,配置数据库的连接信息并注册 IBinlogEventHandler 负责监听各种 binlog 事件。

public class BootStrap {

    public static void main(String[] args) {

        BinlogClientConfig clientConfig = new BinlogClientConfig();
        clientConfig.setHost("127.0.0.1");
        clientConfig.setPort(3306);
        clientConfig.setUsername("root");
        clientConfig.setPassword("taoren@123");
        clientConfig.setServerId(1990);

        IBinlogClient binlogClient = new BinlogClient(clientConfig);

        binlogClient.registerEventHandler(new IBinlogEventHandler() {

            @Override
            public void onInsert(BinlogEvent event) {
                System.out.println("插入数据:{}", event.getData());
            }

            @Override
            public void onUpdate(BinlogEvent event) {
                System.out.println("修改数据:{}", event.getData());
            }

            @Override
            public void onDelete(BinlogEvent event) {
                System.out.println("删除数据:{}", event.getData());
            }


            // 判定当前 handler 是否需要被执行, 你可以用过 BinlogEvent 获取到 database 和 table 判定依据
            @Override
            public boolean isHandle(String database, String table) {
                return database.equals("pear-admin") && table.equals("sys_user");
            }
        });

        binlogClient.connect();
    }
}

对于 Spring Boot 项目,可以使用下面的依赖:

<dependency>
    <groupId>com.gitee.Jmysy</groupId>
    <artifactId>binlog4j-spring-boot-starter</artifactId>
    <version>latest.version</version>
</dependency>

数据库连接信息可以在 application.yml / application.properties中进行配置:

spring:
  binlog4j:
    redis-config:
      host: 127.0.0.1
      port: 6379
      password: taoren@123
    client-configs:
      master:
        username: root
        password: taoren@123
        host: 127.0.0.1
        port: 3306
        serverId: 1990
      slave:
        username: root
        password: taoren@123
        host: 127.0.0.1
        port: 3307
        serverId: 1991

Spring Boot 项目中通过@BinlogSubscriber 注解指定 handler 绑定的客户端。

@BinlogSubscriber(clientName = "master")
public class UserEventHandler implements IBinlogEventHandler<User{

    @Override
    public void onInsert(BinlogEvent<User> event) {
        System.out.println("插入数据:" + event.getData());
    }

    @Override
    public void onUpdate(BinlogEvent<User> event) {
        System.out.println("修改数据:" + event.getData());
    }

    @Override
    public void onDelete(BinlogEvent<User> event) {
        System.out.println("删除数据:" + event.getData());
    }

    @Override
    public boolean isHandle(String database, String table) {
        return database.equals("pear-admin") && table.equals("sys_user");
    }

}

相关地址

  • 项目地址:https://gitee.com/dromara/binlog4j
  • JavaGuide 开源版javaguide.cn(已经维护五年,138k+ star,准备 Java 面试必备)
  • JavaGuide 面试专版《Java 面试指北 》 (质量很高,专为面试打造,配合 JavaGuide 食用)。

Stirling-PDF:PDF 工具箱

项目介绍

  • 基于 Docker,支持本地托管的 Web 端的 PDF 工具箱,允许对 PDF 文件执行各种操作,例如拆分合并、转换、添加图像、旋转、压缩、添加和删除密码、检测并删除空白页等。
  • 这个项目最初是 100% ChatGPT 制作的,后面才慢慢发展,功能逐渐完善。

技术栈:Spring Boot + Thymeleaf + PDFBox + LibreOffice + OcrMyPdf

效果展示

首页:

首页

压缩:

PDF压缩

PDF 转图片:

PDF转图片转图片后的效果

相关地址

  • 项目地址:https://github.com/Frooodle/Stirling-PDF
  • 在线体验:https://pdf.adminforge.de/

jasypt-spring-boot:Spring Boot 的 Jasypt 集成

项目介绍

  • Jasypt(Java Simplified Encryption)是一个简单易用的开源的 Java 加密库,支持多种加密算法,用于简化应用程序中的数据加密和解密操作。
  • Jasypt 可以很方便地与 SpringBoot 应用结合,jasypt-spring-boot 就是 Spring Boot 2.x 和 3.0.0 的集成。

使用效果(这里以加密数据库参数为例展示)

引入依赖:

<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.5</version>
</dependency>

application.yml中指定加密算法、秘钥、前缀以及后缀等:

jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES  # 配置加密算法
    password: 123456  # 推荐使用JVM参数
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    property:
      prefix: SUNS(
      suffix: )

测试:

@SpringBootTest
class JasyptDemoApplicationTests {

    @Resource
    private StringEncryptor stringEncryptor;

    @Test
    void testGenerate() {
        String url = "jdbc:mysql://localhost:3306/suns";
        String username = "root";
        String password = "123456";

        String urlSecret = this.stringEncryptor.encrypt(url);
        String usernameSecret = this.stringEncryptor.encrypt(username);
        String passwordSecret = this.stringEncryptor.encrypt(password);

        System.out.println("url为:" + url + ",加密后为" + urlSecret);
        System.out.println("username为:" + username + ",加密后为" + usernameSecret);
        System.out.println("password为:" + password + ",加密后为" + passwordSecret);
    }
}

获取加密后的结果并填充到application.yml中:

spring:
  application:
    name: JASYPT-DEMO
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: SUNS(dBQZmnmLCIlF7jXaKnlJlvxRiRxYUGQp+yx989jFIM7apyLTXMNxQYoNZdowCC6P)  # 使用密文,注意使用IT()包裹起来
    username: SUNS(NLQETcOTnMhO32Ay6/J0wQ==)
    password: SUNS(6KTh0+ejC43aZzVwc8xfxw==)

详细使用请参考这篇文章:SpringBoot 使用 Jasypt 对敏感信息进行脱敏处理

相关地址

  • 项目地址:https://github.com/ulisesbocchio/jasypt-spring-boot
  • Demo 地址:https://github.com/ulisesbocchio/jasypt-spring-boot-samples/tree/master/jasypt-spring-boot-demo
  • JavaGuide 开源版javaguide.cn(已经维护五年,138k+ star,准备 Java 面试必备)
  • JavaGuide 面试专版《Java 面试指北 》 (质量很高,专为面试打造,配合 JavaGuide 食用)。

wms-ruoyi:基于若依的 wms 仓库管理系统

项目介绍

  • 从项目名称就可以看出来,这是一套基于若依的 wms 仓库管理系统,支持仓库基础数据维护、入库、出库、库存看板等功能。
  • 个人及企业免费使用,完全开源。

技术栈

  • 前端:Vue+Element UI(ant design 正在开发中)
  • 后端:Spring Boot + Spring Security + Jwt + MySQL + Redis

效果展示

演示地址:http://wms.ichengle.top

库存看板:

库存看板

入库:

入库

相关地址

  • 项目地址:https://github.com/zccbbg/wms-ruoyi
  • B 站视频介绍:https://www.bilibili.com/video/BV1ys4y1q7uG/

··············  END  ··············

近期文章精选

      相关推荐

    • 一行代码搞定禁用web开发者工具
    • “液态金属”材料亮相,科学方法沙漠取水,这届WE大会很赛博朋克
    • vivo自研大模型/操作系统齐面世!蓝心大模型加持最新OriginOS4
    • OpenAI潜入黑客群聊!盗用ChatGPT被换成“喵喵GPT”,网友:绝对的传奇
    • 姚班斯隆奖马腾宇创业:大模型+顾问李飞飞
    • 单点端到端文本检测识别框架速度提升19倍!华科、华南理工等联合发布SPTS v2
    • 专攻芯片设计,英伟达推出定制版大语言模型ChipNeMo!
    • EDA顶会ICCAD放榜!陈怡然团队摘得「时间检验奖」,表彰十年前论文
    • DeepMind曝新一代AlphaFold,预测准确率暴涨近10%!DNA和RNA的AlphaFold时刻来了
    • 图灵三巨头激战持续升级!吴恩达痛批美国AI禁令扼杀开源,马斯克都下场了
    • ICCV 2023 | 首个用于目标检测任务的直接训练脉冲神经网络
    • 交叉熵损失的“替代品”:基于最优传输思想设计的分类损失函数EMO
    • 四万字详解AI对齐:北大联合多高校团队发布对齐全面性综述
    • GPT-4写代码,DALL·E 3+MJ搞定画面,AI版「愤怒的南瓜」来袭
    • 吴恩达加入图灵奖得主讨论:「AI灭绝论」弊大于利
    • 斯坦福马腾宇创业,大模型方向,Manning、Chris Re等是顾问
    • 全球最强长文本大模型,一次可读35万汉字:Baichuan2-192K上线
    • 杨成虎:存储&计算是过去,记忆&推理才是未来
    • Python脚本打包exe,auto-py-to-exe来帮你!
    • 我也入局了。。。