package com.dounine.corgi.demo.session; import com.dounine.corgi.exception.SerException; import com.dounine.corgi.demo.entity.user.User; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.LocalDateTime; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Created by huanghuanlai on 16/5/24. */ public final class UserSession { private static final Logger CONSOLE = LoggerFactory.getLogger(UserSession.class); private static final Map<String,User> SESSIONS = new ConcurrentHashMap<>(0); private static final RuntimeException TOKEN_NOT_NULL = new RuntimeException("token令牌不能为空"); private UserSession(){} static { CONSOLE.info("sessionQuartz start"); new Thread(new SessionQuartz(SESSIONS)).start(); } /** * 新增用户会话信息 * @param token 令牌值 * @param user 登录用户信息 * @return 是否已经登录 */ public static void put(String token,User user){ if(StringUtils.isNotBlank(token)){ user.setAccessTime(LocalDateTime.now()); SESSIONS.put(token,user); }else{ throw TOKEN_NOT_NULL; } } /** * 根据令牌删除用户会话信息 * @param token 登录令牌 * @return 是否删除成功 */ public static void remove(String token){ if(StringUtils.isNotBlank(token)){ SESSIONS.remove(token); } throw TOKEN_NOT_NULL; } public static void removeByUsername(String username) throws SerException { if(StringUtils.isNotBlank(username)){ for(Map.Entry<String,User> entry : SESSIONS.entrySet()){ if(username.equals(entry.getValue().getUsername())){ SESSIONS.remove(entry.getKey()); break; } } }else{ throw new SerException("username用户名不能为空"); } } /** * 检测用户会话是否存在 * @param token 令牌 * @return 是否存在 */ public static boolean exist(String token){ if(StringUtils.isNotBlank(token)){ return SESSIONS.get(token)!=null; } throw TOKEN_NOT_NULL; } /** * 获取用户会话总数 * @return 总数 */ public static long count(){ return SESSIONS.size(); } /** * 获取全部用户会话信息 * @return 会话信息集合 */ public static Map<String,User> sessions(){ if(null!=SESSIONS&&SESSIONS.size()>0){ return SESSIONS; } return null; } public static boolean verify(String token) { return SESSIONS.get(token)!=null; } public static void main(String[] args){ //System.out.println(TokenUtils.verify(TokenUtils.create("119.129.208.1","admin"))); } }