Spring session 获取当前账户登录数的实例代码
Spring session 获取当前账户登录数
一、登录校验成功时,向session加入关键信息,代码如下:
session.setAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, userId);
二、获取当前session账户的登录数,及有多少个客户端使用了当前账户登录:
@Autowired private RedisOperationsSessionRepository sessionRepository; public Integer fetchSameLoginNum(HttpServletRequest request) { int result = 0; HttpSession session = request.getSession(); if (session != null) { String userId = (String) session.getAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME); if (StringUtils.isNotEmpty(userId)) { Map<String, ? extends Session> nameAndIndexValue = sessionRepository .findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, userId); result = nameAndIndexValue.size(); } } return result; }
补充:解决同一浏览器登录多个账户session共享问题
首先session是同一PC同一浏览器共享的.比如如下代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { HttpSession hs = request.getSession(); //存入session String user = request.getParameter("user"); hs.setAttribute("user", user); response.sendRedirect("index.jsp"); }
解决办法1:限制同一浏览器多个账户登录,方法是根据key获取session的值 session.getAttribute(key),判断这个结果是不是空,不是空,就说明已登录。
解决方法2:不同帐户共用一个session,将信息以(key,value)形式放入session,然后所有的请求都加上userid参数,所有从session中取数据出来都通过getXXByUserId。这种实现对现有框架改动较大,而且不仅仅是放在session中的用户信息需要根据byuserid来提取而是所有的会话里面的信息都要byuserid的来弄。故不建议采取这种做法。
到此这篇关于Spring session 获取当前账户登录数的文章就介绍到这了,更多相关Spring session获取当前账户登录数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
IDEA调试源码小技巧之辨别抽象类或接口多种实现类的正确路径
这篇文章主要介绍了IDEA调试源码小技巧之辨别抽象类或接口多种实现类的正确路径,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01Nacos服务实例的权重设置方式(以及设置为0时的作用与场景)
这篇文章主要介绍了Nacos服务实例的权重设置方式(以及设置为0时的作用与场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
最新评论