You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
3.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.aurora.service;
import com.aurora.model.dto.UserDetailsDTO;// 导入用户详情数据传输对象UserDetailsDTO用于封装认证用户的详细信息如用户名、权限列表、登录时间等
import io.jsonwebtoken.Claims;// 导入 JWT 声明接口Claims代表 JWT Token 的负载部分,包含 token 中存储的键值对信息(如用户标识、签发时间等)
import javax.servlet.http.HttpServletRequest;// 导入 HTTP Servlet 请求对象HttpServletRequest用于获取客户端请求中的头信息、参数等以提取 token
//Token 服务通常用于身份验证和授权
//主要功能包括:为登录用户创建令牌、验证令牌有效性、解析令牌获取用户信息、管理令牌生命周期等
public interface TokenService {
/**
* 根据用户详细信息创建 JWT 令牌,该方法将用户的核心信息如用户名、角色嵌入令牌负载Payload并生成数字签名确保令牌完整性
* @param userDetailsDTO 用户详情数据传输对象包含生成令牌所需的用户身份信息如用户名、ID、权限等
* @return String 生成的 JWT 令牌字符串通常包含头部Header、负载Payload和签名Signature三部分
*/
String createToken(UserDetailsDTO userDetailsDTO);
/**
* 根据主题Subject创建 JWT 令牌(简化版),该方法适用于仅需标识主题场景,令牌负载可能仅包含主题信息,适用于简单认证或临时令牌生成
* @param subject 令牌主题通常是一个唯一标识符如用户ID、客户端ID用于标识令牌的归属主体
* @return String 生成的 JWT 令牌字符串
*/
String createToken(String subject);
//刷新用户令牌(通常用于延长令牌有效期),该方法检查现有令牌的有效期,若即将过期则生成新令牌并更新其过期时间,用户无需重新登录
void refreshToken(UserDetailsDTO userDetailsDTO);
//续签令牌(可能涉及重新生成令牌或更新令牌关键信息),与刷新不同,续签可能因安全策略(如密钥轮换)或用户信息变更(如权限更新)而重新生成令牌
void renewToken(UserDetailsDTO userDetailsDTO);
/**
* 解析 JWT 令牌并获取其声明Claims信息,该方法验证令牌的签名有效性,并解析出令牌负载中存储的所有声明(键值对),如用户标识、签发时间、过期时间等
* @param token 待解析的 JWT 令牌字符串
* @return Claims 令牌的声明集合对象,可通过其 get() 方法获取具体声明值(如 claims.get("username", String.class)
*/
Claims parseToken(String token);
/**
* 从 HTTP 请求中提取令牌并解析为完整的用户详情信息
* 该方法通常从请求头(如 Authorization: Bearer <token>)或请求参数中提取令牌,然后解析令牌并查询数据库或缓存补全用户详细信息
* @param request HTTP Servlet 请求对象,用于获取携带令牌的请求头(如 Authorization或参数如 access_token
* @return UserDetailsDTO 用户详情数据传输对象,包含从令牌和系统中获取的完整用户信息(如权限列表、用户状态等)
*/
UserDetailsDTO getUserDetailDTO(HttpServletRequest request);
/**
* 删除(或失效)指定用户的登录状态及相关令牌
* 该方法通常用于用户主动登出或管理员强制下线通过移除缓存如Redis中的用户令牌映射使该用户的所有现有令牌立即失效
* @param userId 用户主键ID指定要登出的用户标识
*/
void delLoginUser(Integer userId);
}