change package name,fixes error

This commit is contained in:
2025-08-05 14:44:03 +08:00
parent 9832336b89
commit 69700c8fe1
22 changed files with 46 additions and 39 deletions

View File

@@ -0,0 +1,91 @@
package com.onekeycall.videotablet.dto;
import lombok.Data;
/**
* 双Token认证令牌对AccessToken + RefreshToken
* 设计要点:
* 1. 访问令牌短期有效30分钟刷新令牌长期有效7天
* 2. 绑定设备ID防止跨设备滥用[1](@ref)
* 3. 精确控制双Token过期时间
*/
@Data
public class TokenPair {
// 访问令牌用于API请求认证
private String accessToken;
// 刷新令牌用于获取新AccessToken
private String refreshToken;
// AccessToken过期时间戳毫秒
private long accessExpiresAt;
// RefreshToken过期时间戳毫秒
private long refreshExpiresAt;
// 关联设备指纹(防御中间人攻击)[1](@ref)
private String deviceId;
/**
* 全参数构造器(安全增强版)
* @param accessToken JWT格式访问令牌
* @param refreshToken JWT格式刷新令牌
* @param accessExpireMs AccessToken有效期毫秒
* @param refreshExpireMs RefreshToken有效期毫秒
* @param deviceId 客户端设备指纹
*/
public TokenPair(String accessToken, String refreshToken,
long accessExpireMs, long refreshExpireMs,
String deviceId) {
this.accessToken = accessToken;
this.refreshToken = refreshToken;
this.accessExpiresAt = System.currentTimeMillis() + accessExpireMs;
this.refreshExpiresAt = System.currentTimeMillis() + refreshExpireMs;
this.deviceId = deviceId;
}
/**
* 快速创建方法(推荐)
* @param accessToken 访问令牌
* @param refreshToken 刷新令牌
* @param deviceId 设备指纹
* @return 初始化过期时间的TokenPair
*/
public static TokenPair create(String accessToken, String refreshToken, String deviceId) {
return new TokenPair(
accessToken,
refreshToken,
30 * 60 * 1000, // 30分钟有效期
7 * 24 * 60 * 60 * 1000, // 7天有效期
deviceId
);
}
/**
* 检查AccessToken是否过期
* @return true=已过期false=有效
*/
public boolean isAccessExpired() {
return System.currentTimeMillis() > accessExpiresAt;
}
/**
* 检查RefreshToken是否过期
* @return true=已过期false=有效
*/
public boolean isRefreshExpired() {
return System.currentTimeMillis() > refreshExpiresAt;
}
/**
* 安全刷新令牌生成新TokenPair
* @param newAccessToken 新访问令牌
* @param newRefreshToken 新刷新令牌
* @return 更新后的TokenPair保留原设备ID
*/
public TokenPair refresh(String newAccessToken, String newRefreshToken) {
return new TokenPair(
newAccessToken,
newRefreshToken,
this.accessExpiresAt - System.currentTimeMillis(), // 剩余时间延续
this.refreshExpiresAt - System.currentTimeMillis(),
this.deviceId // 保持设备一致性
);
}
}