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
);
最佳实践
- 设置合理的并发数:根据业务需求设置最大并发登录数
- 定期清理过期会话:建议设置定时任务清理过期会话
- 记录登录日志:建议记录用户登录日志用于安全审计
- 异常登录告警:检测异常登录行为并告警
- 二次验证:敏感操作建议进行二次验证
扩展功能
- 支持地理位置解析
- 支持设备指纹识别
- 支持登录行为分析
- 支持异常登录检测
- 支持WebSocket实时通知
源码获取
关注公众号「服务端技术精选」,回复「登录设备管理」获取完整项目代码。
标题:SpringBoot 登录设备管理系统 示例工程
作者:jiangyi
地址:http://jiangyi.space/articles/2026/03/02/1772277380782.html
公众号:服务端技术精选
评论
0 评论