Skip to content

hongspell/rustdesk-api-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RustDesk API (Java Implementation)

基于 Spring Boot 3.5.6 + Maven 的 RustDesk API 服务器 Java 实现版本。

项目概述

这是一个完整的 RustDesk 远程桌面管理后端 API 系统,使用 Java + Spring Boot 框架开发,实现了与 Go 版本相同的功能。

技术栈

  • Java: 21
  • Spring Boot: 3.5.6
  • 认证框架: Sa-Token 1.44.0 (轻量级权限认证框架)
  • Spring Data JPA: Hibernate 6.6.x
  • 密码加密: BCrypt 0.10.2 (at.favre.lib)
  • 第三方登录: JustAuth 1.16.7 (支持 GitHub, Google, OIDC, Lark 等)
  • 验证码: Kaptcha 2.3.2
  • 数据库: SQLite (开发) / MySQL / PostgreSQL (生产)
  • Redis: 用于 Sa-Token 分布式 Session 存储
  • API文档: Springdoc OpenAPI 2.8.13 (Swagger)
  • 对象映射: MapStruct 1.6.3
  • 构建工具: Maven 3.x

主要功能

PC端API

  • ✅ 个人版API支持
  • ✅ 用户认证(密码登录)
  • ✅ Sa-Token 轻量级 Token 管理
  • ✅ 地址簿管理
  • ✅ 群组管理
  • ✅ 第三方授权登录 (GitHub, Google, OIDC, Lark - 由 JustAuth 提供)
  • ✅ 国际化支持
  • ✅ 验证码支持 (Kaptcha)

Web Admin 后台

  • ✅ 用户管理
  • ✅ 设备管理
  • ✅ 地址簿管理
  • ✅ 标签管理
  • ✅ 群组管理
  • ✅ OAuth配置管理
  • ✅ 登录日志
  • ✅ 连接审计日志
  • ✅ 文件传输日志

安全特性

  • ✅ BCrypt密码加密 (at.favre.lib,工业标准)
  • ✅ Sa-Token 轻量级认证框架
  • ✅ Redis 分布式 Session 存储
  • ✅ 双重认证机制 (API + Admin)
  • ✅ CORS跨域支持
  • ✅ 基于角色的访问控制
  • ✅ 支持 MD5 遗留密码自动升级

快速开始

环境要求

  • JDK 21+
  • Maven 3.6+
  • Redis 7+ (Sa-Token Session 存储)
  • SQLite (开发) / MySQL 8+ / PostgreSQL 13+ (生产)

安装运行

1. 克隆项目

cd /path/to/your/workspace
# 项目已创建在 rustdesk-api-java 目录

2. 启动 Redis

Sa-Token 需要 Redis 来存储分布式 Session:

# 使用 Docker 启动 Redis
docker run -d --name redis-rustdesk -p 6379:6379 redis:7-alpine

# 或使用本地 Redis
redis-server

3. 配置数据库

开发环境 (SQLite): 默认配置已设置为使用SQLite,无需额外配置。

生产环境 (MySQL): 编辑 src/main/resources/application-prod.yml:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/rustdesk?serverTimezone=Asia/Shanghai
    username: root
    password: your_password
  data:
    redis:
      host: localhost
      port: 6379

4. 编译项目

mvn clean compile

5. 运行应用

# 开发环境
mvn spring-boot:run

# 或编译后运行
mvn clean package
java -jar target/rustdesk-api.jar

6. 访问应用

默认管理员账号

初次启动时会自动创建管理员账号:

  • 用户名: admin
  • 密码: admin@123

⚠️ 请在首次登录后立即修改密码!

项目结构

rustdesk-api-java/
├── src/main/java/com/rustdesk/api/
│   ├── config/              # 配置类
│   │   ├── SaTokenConfig.java    # Sa-Token 认证配置
│   │   ├── JpaConfig.java
│   │   ├── CorsConfig.java
│   │   └── properties/
│   ├── entity/              # 实体类 (15个)
│   │   ├── User.java
│   │   ├── Peer.java
│   │   ├── AddressBook.java
│   │   └── ...
│   ├── repository/          # JPA Repository (15个)
│   ├── service/             # 业务逻辑层 (7个)
│   │   ├── UserService.java
│   │   └── ...
│   ├── controller/          # 控制器
│   │   ├── api/            # RustDesk客户端API
│   │   └── admin/          # 管理后台API
│   ├── dto/                # 数据传输对象
│   │   ├── request/
│   │   └── response/
│   ├── util/               # 工具类
│   │   ├── PasswordUtil.java     # BCrypt 密码加密
│   │   └── ...
│   └── exception/          # 异常定义
│       └── GlobalExceptionHandler.java
├── src/main/resources/
│   ├── application.yml           # 主配置
│   ├── application-dev.yml       # 开发环境
│   ├── application-prod.yml      # 生产环境
│   └── db/migration/            # Flyway数据库迁移
│       ├── V1__init_schema.sql
│       └── V2__init_data.sql
├── pom.xml
├── README.md
└── UPGRADE.md              # 架构升级文档

配置说明

application.yml 主要配置

server:
  port: 21114

# Sa-Token 配置
sa-token:
  token-name: satoken
  timeout: 604800              # Token 有效期 7天
  is-concurrent: true          # 允许并发登录
  is-share: false              # 不共享 Token
  token-style: uuid
  is-read-header: true
  token-prefix: "Bearer"

# Redis 配置
spring:
  data:
    redis:
      host: localhost
      port: 6379
      database: 0

# RustDesk 服务器配置
rustdesk:
  security:
    captcha-threshold: 3        # 验证码触发次数
    ban-threshold: 5            # 封禁IP触发次数

  rustdesk-server:
    id-server: ""               # RustDesk ID服务器
    relay-server: ""            # RustDesk Relay服务器
    api-server: "http://localhost:21114"
    key: ""                     # 公钥

环境变量

变量名 说明 示例
REDIS_HOST Redis主机 localhost
REDIS_PORT Redis端口 6379
RUSTDESK_ID_SERVER ID服务器地址 192.168.1.66:21116
RUSTDESK_RELAY_SERVER Relay服务器地址 192.168.1.66:21117
RUSTDESK_API_SERVER API服务器地址 http://192.168.1.66:21114
RUSTDESK_KEY RustDesk公钥 key_content
MYSQL_HOST MySQL主机 localhost
MYSQL_PORT MySQL端口 3306
MYSQL_DATABASE 数据库名 rustdesk
MYSQL_USERNAME 数据库用户名 root
MYSQL_PASSWORD 数据库密码 password

API 文档

主要端点

认证相关

POST   /api/login              # 用户登录
POST   /api/logout             # 用户登出
GET    /api/login-options      # 获取登录选项

用户管理

GET    /api/user/info          # 当前用户信息
POST   /api/user/changePassword # 修改密码

设备管理

POST   /api/sysinfo            # 上报设备信息
GET    /api/peers              # 获取设备列表

管理后台

POST   /api/admin/login        # 管理员登录
GET    /api/admin/user/list    # 用户列表
POST   /api/admin/user/create  # 创建用户
GET    /api/admin/group/list   # 群组列表

详细API文档请访问: http://localhost:21114/swagger-ui.html

数据库说明

项目使用 Flyway 进行数据库版本管理,包含15张表:

  • users - 用户表
  • user_tokens - Token表
  • peers - 设备表
  • address_books - 地址簿表
  • address_book_collection - 地址簿集合
  • address_book_collection_rule - 集合共享规则
  • tags - 标签表
  • groups - 群组表
  • oauth - OAuth配置
  • user_third - 第三方账号绑定
  • login_log - 登录日志
  • audit_conn - 连接审计
  • audit_file - 文件审计
  • share_record - 分享记录
  • server_cmd - 服务器命令

开发状态

✅ 已完成 (v2.0.0)

  • 项目架构搭建
  • 所有实体类创建 (15个)
  • Repository层完成 (15个)
  • Service层实现 (7个核心服务)
  • Controller层基础实现 (6个控制器)
  • 架构升级: Spring Security → Sa-Token (详见 UPGRADE.md)
  • BCrypt 密码加密 (独立库)
  • Redis 分布式 Session
  • 数据库迁移脚本 (Flyway)
  • API文档集成 (Swagger)
  • 第三方登录准备 (JustAuth)

⚠️ 待完善

  • 时间字段类型统一 (部分实体需从LocalDateTime改为Long timestamp)
  • JustAuth 第三方登录完整集成 (Lark/Feishu)
  • 地址簿同步功能
  • Web Client集成
  • 单元测试编写
  • Docker容器化部署
  • 安全漏洞修复 (CVE-2018-18531, CVE-2025-48924)

已知问题

  1. 时间戳类型不一致: 部分实体的时间字段(如ShareRecord.expire)需要从LocalDateTime改为Long以与Go版本保持一致

  2. CVE 安全漏洞 (详见 UPGRADE.md):

    • CVE-2018-18531 (Kaptcha 9.8分): 使用 Random 而非 SecureRandom
    • CVE-2025-48924 (Commons Lang 5.3分): 栈溢出风险
    • 状态: 已知风险,暂时接受,计划替换
  3. 首次启动:

    • 必须启动 Redis (端口 6379)
    • 清理旧的数据库文件: rm -f data/rustdesk.db*

修复建议

修复时间字段类型

需要将以下实体的时间字段改为Long类型(Unix timestamp毫秒):

// ShareRecord.java
@Column(name = "expire")
private Long expire;  // 改为 Long

// 其他可能需要修改的时间字段类似处理

架构升级历程

查看完整的架构升级文档: UPGRADE.md

主要变更

组件 v1.x v2.0 改进
Spring Boot 3.2.5 3.5.6 最新稳定版
认证框架 Spring Security Sa-Token 1.44.0 代码减少 61%
Token 方案 JWT (自实现) Sa-Token (内置) 简化管理
密码加密 Spring BCrypt at.favre.lib BCrypt 轻量独立
Session 存储 内存/数据库 Redis 分布式支持
依赖体积 5.2MB+ 450KB 减少 91%

与Go版本对比

特性 Go版本 Java版本 说明
核心API 完全兼容
Web Admin 功能一致
第三方登录 GitHub/Google/OIDC/Lark (JustAuth)
轻量级认证 - Sa-Token (比 Spring Security 更轻)
Web Client ⚠️ 待集成
Docker ⚠️ 待完善
性能 中等 JVM启动较慢,运行时性能接近

贡献

欢迎提交 Issue 和 Pull Request!

许可证

本项目参考 lejianwen/rustdesk-api 项目实现。

相关链接

官方文档

技术框架


开发时间: 2024年10月 - 2025年1月 版本: 2.0.0 (Spring Security → Sa-Token 架构升级) 作者: RustDesk API Team (Java Implementation) 架构升级: 详见 UPGRADE.md

Releases

No releases published

Packages

No packages published

Languages