package org.hsweb.web.core.session.simple; import org.hsweb.web.bean.po.user.User; import org.hsweb.web.core.session.AbstractHttpSessionManager; import org.hsweb.web.core.utils.WebUtil; import javax.servlet.http.HttpSession; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.stream.Collectors; /** * Created by zhouhao on 16-5-27. */ public class SimpleHttpSessionManager extends AbstractHttpSessionManager { /** * httpSession存储器,sessionId:HttpSession */ private static final ConcurrentMap<String, HttpSession> sessionStorage = new ConcurrentHashMap<>(); /** * 用户ID与session管理存储器,userId:HttpSession */ private static final ConcurrentMap<String, HttpSession> userSessionStorage = new ConcurrentHashMap<>(); @Override public HttpSession getSessionBySessionId(String sessionId) { return sessionStorage.get(sessionId); } @Override public Set<User> tryGetAllUser() { return userSessionStorage.values().stream().map(httpSession -> (User) httpSession.getAttribute("user")) .filter(user -> user != null).collect(Collectors.toSet()); } @Override public User getUserBySessionId(String sessionId) { if (sessionId == null) return null; HttpSession session = sessionStorage.get(sessionId); return session == null ? null : WebUtil.getLoginUser(session); } @Override public String getSessionIdByUserId(String userId) { HttpSession session = userSessionStorage.get(userId); if (session != null) { User user = WebUtil.getLoginUser(session); if (user == null) { userSessionStorage.remove(userId); return null; } return session.getId(); } return null; } @Override public void removeUser(String userId) { HttpSession session = userSessionStorage.get(userId); if (session != null) { session.removeAttribute("user"); sessionStorage.remove(session.getId()); userSessionStorage.remove(userId); onUserLoginOut(userId, session); } } @Override public void removeSession(String sessionId) { HttpSession session = sessionStorage.get(sessionId); if (session != null) { User user = WebUtil.getLoginUser(session); if (user != null) { onUserLoginOut(user.getId(), session); userSessionStorage.remove(user.getId()); } sessionStorage.remove(sessionId); } } @Override public void addUser(User user, HttpSession session) { removeUser(user.getId());//踢出已经登陆 sessionStorage.put(session.getId(), session); userSessionStorage.put(user.getId(), session); session.setAttribute("user", user); onUserLogin(user, session); } @Override public Set<String> getUserIdList() { return new HashSet<>(userSessionStorage.keySet()); } @Override public int getUserTotal() { return userSessionStorage.size(); } @Override public Set<String> getSessionIdList() { return new HashSet<>(sessionStorage.keySet()); } @Override public boolean isLogin(String userId) { return userSessionStorage.containsKey(userId); } }