做服务端开发针对session相关的操作很常见,同时通过spring-session也可以解决分布式下session共享的需求,加入相关配置就可以了,今天就结合spring了解下常见的session操作,总结了一个session工具类,喜欢的可以直接拿去用,不清楚怎么用的可以评论 /** * 登录用户 Session管理工具类 * */ public class SessionUtil implements BeanFactoryAware { private static final Logger log = LoggerFactory.getLogger(SessionUtil.class); private static StringRedisTemplate redis; private static BoundHashOperations<String, String, String> ou; /** 获取用户ID */ public static Integer getUserId() { //spring-session -- RedisOperationsSessionRepository 从redis中取获取 return (Integer) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_ID); } /** 获取用户登录名 */ public static String getLoginName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME); } /** 获取用户真实姓名 */ public static String getRealName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME); } /** 获取用户手机号 */ public static String getCellPhone() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE); } /** 设置用户 */ /** * 设置session属性,会同步到redis-session中 * @param user */ public static void setUser(User user) { if (user == null) { log.error("setUser failure,because the user is null."); return; } WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_ID, user.getId()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME, user.getLoginName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME, user.getRealName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE, user.getCellPhone()); addToMap(user); } /** 设置当前session失效 */ public static void invalidate() { getRequest().getSession().invalidate(); } /** * 获取HttpServletRequest * @return */ public static HttpServletRequest getRequest() { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } /** 判断用户是否在线 */ public static boolean isOnlineUser(Integer userId) { return ou.hasKey(userId.toString()); } /** * 记录用户登录后对应userId和SessionId的Map关系 * 针对重复登录,在sessionId中追加重复登录的sId * @param user */ private static void addToMap(User user) { String uId = user.getId().toString(); String sId = getRequest().getSession().getId(); Boolean hasKey = ou.hasKey(uId); if (hasKey) { String sids = ou.get(uId); ou.put(uId, sids sId); } else { ou.put(uId, sId); } } /** 判断sessionId是否过期 */ public static boolean isExpiredSessionId(String sessionId) { return !redis.hasKey(Const.SPRING_SESSION_EXPIRE_PREFFIX sessionId); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { redis = beanFactory.getBean(StringRedisTemplate.class); ou = redis.boundHashOps(Const.MAP_ONLINE_USER_SESSION_IDS); } } ,我来为大家讲解一下关于session的4种状态?跟着小编一起来看一看吧!
session的4种状态
做服务端开发针对session相关的操作很常见,同时通过spring-session也可以解决分布式下session共享的需求,加入相关配置就可以了,今天就结合spring了解下常见的session操作,总结了一个session工具类,喜欢的可以直接拿去用,不清楚怎么用的可以评论。 /** * 登录用户 Session管理工具类 * */ public class SessionUtil implements BeanFactoryAware { private static final Logger log = LoggerFactory.getLogger(SessionUtil.class); private static StringRedisTemplate redis; private static BoundHashOperations<String, String, String> ou; /** 获取用户ID */ public static Integer getUserId() { //spring-session -- RedisOperationsSessionRepository 从redis中取获取 return (Integer) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_ID); } /** 获取用户登录名 */ public static String getLoginName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME); } /** 获取用户真实姓名 */ public static String getRealName() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME); } /** 获取用户手机号 */ public static String getCellPhone() { return (String) WebUtils.getSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE); } /** 设置用户 */ /** * 设置session属性,会同步到redis-session中 * @param user */ public static void setUser(User user) { if (user == null) { log.error("setUser failure,because the user is null."); return; } WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_ID, user.getId()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_LOGINNAME, user.getLoginName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_REALNAME, user.getRealName()); WebUtils.setSessionAttribute(getRequest(), Const.SESSION_USER_CELLPHONE, user.getCellPhone()); addToMap(user); } /** 设置当前session失效 */ public static void invalidate() { getRequest().getSession().invalidate(); } /** * 获取HttpServletRequest * @return */ public static HttpServletRequest getRequest() { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } /** 判断用户是否在线 */ public static boolean isOnlineUser(Integer userId) { return ou.hasKey(userId.toString()); } /** * 记录用户登录后对应userId和SessionId的Map关系 * 针对重复登录,在sessionId中追加重复登录的sId * @param user */ private static void addToMap(User user) { String uId = user.getId().toString(); String sId = getRequest().getSession().getId(); Boolean hasKey = ou.hasKey(uId); if (hasKey) { String sids = ou.get(uId); ou.put(uId, sids sId); } else { ou.put(uId, sId); } } /** 判断sessionId是否过期 */ public static boolean isExpiredSessionId(String sessionId) { return !redis.hasKey(Const.SPRING_SESSION_EXPIRE_PREFFIX sessionId); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { redis = beanFactory.getBean(StringRedisTemplate.class); ou = redis.boundHashOps(Const.MAP_ONLINE_USER_SESSION_IDS); } }
欢迎大家关注,持续更新!
,