SpringBoot 登录设备管理系统 示例工程

一个基于SpringBoot的登录设备管理系统,支持用户查看所有登录设备并强制踢下线。

功能特性

  • 多设备登录管理:支持同一账号多设备同时登录
  • 设备列表查看:用户可查看所有已登录设备
  • 强制踢下线:一键踢出其他设备会话
  • 设备信息识别:自动识别设备类型、IP地址等
  • 会话统计:实时统计活跃、已踢出、已登出会话
  • JWT认证:基于JWT的无状态认证机制
  • Redis缓存:使用Redis存储会话信息

技术栈

  • Spring Boot 3.2.0
  • Spring Security
  • Spring Data JPA
  • Spring Data Redis
  • JWT (jjwt)
  • H2 Database
  • Maven

快速开始

1. 克隆项目

git clone <repository-url>
cd SpringBoot-Device-Session-Management-Demo

2. 启动Redis

确保Redis服务已启动,默认配置为localhost:6379

3. 运行项目

mvn spring-boot:run

4. 访问测试页面

打开浏览器访问:http://localhost:8080

API接口

用户认证

注册

POST /api/auth/register
Content-Type: application/json

{
  "username": "testuser",
  "password": "password123",
  "email": "test@example.com"
}

登录

POST /api/auth/login
Content-Type: application/json

{
  "username": "testuser",
  "password": "password123"
}

登出

POST /api/auth/logout
Authorization: Bearer {token}

验证Token

POST /api/auth/validate
Authorization: Bearer {token}

设备管理

获取设备列表

GET /api/devices
Authorization: Bearer {token}

获取会话详情

GET /api/devices/{sessionId}
Authorization: Bearer {token}

踢出指定设备

DELETE /api/devices/{sessionId}
Authorization: Bearer {token}

踢出所有其他设备

DELETE /api/devices/all
Authorization: Bearer {token}

获取会话统计

GET /api/devices/stats
Authorization: Bearer {token}

核心功能

1. 设备识别

系统自动识别以下设备信息:

  • 设备名称(iPhone、Android、Windows PC等)
  • 设备类型(MOBILE、TABLET、DESKTOP)
  • IP地址
  • User-Agent

2. 会话管理

  • 最大并发登录数:5(可配置)
  • 会话超时时间:7天(可配置)
  • 自动踢出最旧会话

3. 安全特性

  • JWT Token认证
  • BCrypt密码加密
  • Redis会话存储
  • 支持强制踢下线

配置说明

jwt:
  secret: mySecretKeyForJwtTokenGenerationAndValidation123456789
  expiration: 86400000  # Token过期时间(毫秒)

device:
  session:
    max-concurrent: 5           # 最大并发登录数
    timeout: 604800000          # 会话超时时间(毫秒)
    token-prefix: "device:token:"
    user-prefix: "device:user:"

使用示例

1. 用户注册登录

// 注册
POST /api/auth/register
{
  "username": "user1",
  "password": "Password123",
  "email": "user1@example.com"
}

// 登录
POST /api/auth/login
{
  "username": "user1",
  "password": "Password123"
}

// 返回
{
  "success": true,
  "data": {
    "token": "eyJhbGciOiJIUzI1NiJ9...",
    "sessionId": "abc123",
    "deviceName": "Windows PC",
    "deviceType": "DESKTOP",
    "loginTime": "2026-02-28T10:00:00"
  }
}

2. 查看设备列表

GET /api/devices
Authorization: Bearer {token}

// 返回
{
  "success": true,
  "data": [
    {
      "sessionId": "abc123",
      "deviceName": "Windows PC",
      "deviceType": "DESKTOP",
      "ipAddress": "192.168.1.100",
      "loginTime": "2026-02-28T10:00:00",
      "lastActiveTime": "2026-02-28T10:05:00",
      "status": "ACTIVE"
    },
    {
      "sessionId": "def456",
      "deviceName": "iPhone",
      "deviceType": "MOBILE",
      "ipAddress": "192.168.1.101",
      "loginTime": "2026-02-28T09:00:00",
      "lastActiveTime": "2026-02-28T09:30:00",
      "status": "ACTIVE"
    }
  ]
}

3. 踢出设备

DELETE /api/devices/def456
Authorization: Bearer {token}

// 返回
{
  "success": true,
  "message": "设备已踢下线"
}

数据库表结构

users表

CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    create_time DATETIME NOT NULL,
    update_time DATETIME
);

device_sessions表

CREATE TABLE device_sessions (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    user_id BIGINT NOT NULL,
    session_id VARCHAR(255) UNIQUE NOT NULL,
    device_id VARCHAR(255) NOT NULL,
    device_name VARCHAR(255),
    device_type VARCHAR(50),
    ip_address VARCHAR(50),
    location VARCHAR(255),
    user_agent TEXT,
    login_time DATETIME NOT NULL,
    last_active_time DATETIME,
    expire_time DATETIME,
    status VARCHAR(50) NOT NULL,
    create_time DATETIME NOT NULL
);

最佳实践

  1. 设置合理的并发数:根据业务需求设置最大并发登录数
  2. 定期清理过期会话:建议设置定时任务清理过期会话
  3. 记录登录日志:建议记录用户登录日志用于安全审计
  4. 异常登录告警:检测异常登录行为并告警
  5. 二次验证:敏感操作建议进行二次验证

扩展功能

  • 支持地理位置解析
  • 支持设备指纹识别
  • 支持登录行为分析
  • 支持异常登录检测
  • 支持WebSocket实时通知

源码获取

关注公众号「服务端技术精选」,回复「登录设备管理」获取完整项目代码。


标题:SpringBoot 登录设备管理系统 示例工程
作者:jiangyi
地址:http://jiangyi.space/articles/2026/03/02/1772277380782.html
公众号:服务端技术精选
    评论
    0 评论
avatar

取消