//package com.sandu.common.redis.online; // //import cn.hutool.extra.servlet.ServletUtil; //import cn.hutool.http.useragent.UserAgent; //import cn.hutool.http.useragent.UserAgentInfo; //import cn.hutool.http.useragent.UserAgentUtil; //import com.baomidou.mybatisplus.core.toolkit.StringUtils; //import com.sandu.common.redis.RedisService; //import com.sandu.common.security.config.SecurityProperties; //import lombok.extern.slf4j.Slf4j; //import org.springframework.security.core.userdetails.UserDetails; // //import javax.servlet.http.HttpServletRequest; //import java.time.LocalDateTime; //import java.util.ArrayList; //import java.util.List; //import java.util.Optional; //import java.util.Set; // ///** // * @author chenjiantian // * @date 2021/8/6 16:26 // * 在线用户服务类 // * 在 BaseRedisConfig 注入 // */ //@Slf4j //public class OnlineUserService { // // private final SecurityProperties properties; // private final RedisService redisService; // // public OnlineUserService(SecurityProperties properties, RedisService redisService) { // this.properties = properties; // this.redisService = redisService; // } // // /** // * 保存在线用户信息 // */ // public void save(UserDetails userDetails, String token, Long userId,HttpServletRequest request) { // String ip = ServletUtil.getClientIP(request); // UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); // String browser = Optional.ofNullable(userAgent).map(UserAgent::getBrowser).map(UserAgentInfo::getName).orElse(""); // OnlineUser onlineUser = new OnlineUser(userId,userDetails.getUsername(), token, ip, browser, LocalDateTime.now()); //// redisService.set(properties.getOnlineKey() + token, onlineUser, properties.getTokenValidityInSeconds() / 1000); // redisService.set(properties.getOnlineKey() + userDetails.getUsername(), onlineUser); // } // // /** // * 查询全部数据 // * // * @param filter // * @return // */ // public List getAll(String filter) { // Set keys = redisService.keys(properties.getOnlineKey() + "*"); // // List onlineUsers = new ArrayList<>(); // for (String key : keys) { // OnlineUser onlineUser = (OnlineUser) redisService.get(key); // if (StringUtils.isNotBlank(filter)) { // if (onlineUser.toString().contains(filter)) { // onlineUsers.add(onlineUser); // } // } else { // onlineUsers.add(onlineUser); // } // } // onlineUsers.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime())); // return onlineUsers; // } // // private boolean kickOut(String token) throws Exception { // token = properties.getOnlineKey() + token; // return redisService.del(token); // } // // public OnlineUser getOne(String key) { // return (OnlineUser) redisService.get(key); // } // // /** // * 检测用户是否在之前已经登录,已经登录踢下线 // * // * @param userName 用户名 // */ // public void checkLoginOnUser(String userName, String ignoreToken) { //// List onlineUsers = getAll(userName); //// if (onlineUsers == null || onlineUsers.isEmpty()) { //// return; //// } // OnlineUser onlineUser = getOne(properties.getOnlineKey() + userName); // if(onlineUser == null){ // return; // } //// for (OnlineUser onlineUser : onlineUsers) { // if (onlineUser.getUserName().equals(userName)) { // try { // String token = onlineUser.getToken(); // if (StringUtils.isNotBlank(ignoreToken) && !ignoreToken.equals(token)) { // this.kickOut(token); // } else if (StringUtils.isBlank(ignoreToken)) { // this.kickOut(token); // } // } catch (Exception e) { // log.error("checkUser is error", e); // } // } //// } // } // // public void updateOne(OnlineUser onlineUser) { // redisService.set(properties.getOnlineKey() + onlineUser.getUserName(), onlineUser); // } //}