//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<OnlineUser> getAll(String filter) {
|
// Set<String> keys = redisService.keys(properties.getOnlineKey() + "*");
|
//
|
// List<OnlineUser> 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<OnlineUser> 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);
|
// }
|
//}
|