//package com.ruoyi.web.controller.webSocket; // //import com.ruoyi.common.constant.Constants; //import com.ruoyi.common.core.domain.model.LoginUserApplet; //import com.ruoyi.common.core.redis.RedisCache; //import io.jsonwebtoken.Claims; //import io.jsonwebtoken.Jwts; //import lombok.extern.slf4j.Slf4j; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Value; //import org.springframework.stereotype.Component; //import org.springframework.util.StringUtils; // //import java.util.Map; // ///** // * WebSocket认证处理器 // * 处理WebSocket连接的用户认证逻辑 // */ //@Component //@Slf4j //public class WebSocketAuthHandler { // // // @Autowired // private RedisCache redisCache; // // // 令牌秘钥 // @Value("${token.secret}") // private String secret; // // /** // * 验证用户认证信息 // * @param appUserId 用户ID // * @param token 认证令牌(可选) // * @return 认证结果 // */ // public AuthResult authenticateUser(String appUserId, String token) { // try { // if (appUserId == null || appUserId.trim().isEmpty()) { // return AuthResult.failure("用户ID不能为空"); // } // // // return AuthResult.success(); // } catch (Exception e) { // log.error("用户认证失败,用户ID: {}, 错误: {}", appUserId, e.getMessage(), e); // return AuthResult.failure("认证过程中发生错误: " + e.getMessage()); // } // } // // /** // * 验证token // * @param appUserId 用户ID // * @param token 令牌 // * @return 是否有效 // */ // private boolean validateToken(String appUserId, String token) { // try { // if (!StringUtils.hasText(token)) { // log.debug("用户 {} 未提供token,跳过token验证", appUserId); // return true; // 如果没有提供token,允许通过(可以根据业务需求调整) // } // // // 移除Bearer前缀 // if (token.startsWith(Constants.TOKEN_PREFIX)) { // token = token.replace(Constants.TOKEN_PREFIX, ""); // } // // // 解析JWT token // Claims claims = parseToken(token); // if (claims == null) { // log.warn("用户 {} 的token解析失败", appUserId); // return false; // } // // // 从token中获取用户标识 // String uuid = (String) claims.get(Constants.LOGIN_USER_APPLET_KEY); // if (!StringUtils.hasText(uuid)) { // log.warn("用户 {} 的token中未找到用户标识", appUserId); // return false; // } // // // 从Redis中获取用户登录信息 // String userKey = getTokenKey(uuid); // LoginUserApplet loginUser = redisCache.getCacheObject(userKey); // // if (loginUser == null) { // log.warn("用户 {} 的登录信息已过期或不存在", appUserId); // return false; // } // // // 验证用户ID是否匹配 // if (!appUserId.equals(loginUser.getUserId())) { // log.warn("用户 {} 的token与提供的用户ID不匹配", appUserId); // return false; // } // // // 验证token是否过期 // long currentTime = System.currentTimeMillis(); // if (loginUser.getExpireTime() != null && loginUser.getExpireTime() < currentTime) { // log.warn("用户 {} 的token已过期", appUserId); // return false; // } // // log.debug("用户 {} 的token验证成功", appUserId); // return true; // // } catch (Exception e) { // log.error("验证用户 {} 的token时发生错误: {}", appUserId, e.getMessage(), e); // return false; // } // } // // /** // * 解析JWT token // * @param token JWT token // * @return Claims对象 // */ // private Claims parseToken(String token) { // try { // return Jwts.parser() // .setSigningKey(secret) // .parseClaimsJws(token) // .getBody(); // } catch (Exception e) { // log.error("解析token失败: {}", e.getMessage()); // return null; // } // } // // /** // * 获取token在Redis中的key // * @param uuid 用户唯一标识 // * @return Redis key // */ // private String getTokenKey(String uuid) { // return com.ruoyi.common.constant.CacheConstants.LOGIN_TOKEN_KEY + uuid; // } // // /** // * 认证结果类 // */ // public static class AuthResult { // private final boolean success; // private final String message; //// private final TAppUser appUser; // // private AuthResult(boolean success, String message) { // this.success = success; // this.message = message; //// this.appUser = appUser; // } // //// public static AuthResult success(TAppUser appUser) { //// return new AuthResult(true, "认证成功", appUser); //// } //// //// public static AuthResult failure(String message) { //// return new AuthResult(false, message, null); //// } //// //// public boolean isSuccess() { //// return success; //// } //// //// public String getMessage() { //// return message; //// } //// //// public TAppUser getAppUser() { //// return appUser; //// } // } // // /** // * 从认证消息中提取用户信息 // * @param messageObj 消息对象 // * @return 用户认证信息 // */ // public UserAuthInfo extractAuthInfo(Map messageObj) { // String appUserId = (String) messageObj.get("appUserId"); // String token = (String) messageObj.get("token"); // String deviceId = (String) messageObj.get("deviceId"); // String deviceType = (String) messageObj.get("deviceType"); // // return new UserAuthInfo(appUserId, token, deviceId, deviceType); // } // // /** // * 用户认证信息类 // */ // public static class UserAuthInfo { // private final String appUserId; // private final String token; // private final String deviceId; // private final String deviceType; // // public UserAuthInfo(String appUserId, String token, String deviceId, String deviceType) { // this.appUserId = appUserId; // this.token = token; // this.deviceId = deviceId; // this.deviceType = deviceType; // } // // public String getAppUserId() { // return appUserId; // } // // public String getToken() { // return token; // } // // public String getDeviceId() { // return deviceId; // } // // public String getDeviceType() { // return deviceType; // } // } //}