今天一起探讨shiro实现账户同一时刻session唯一

时间:2019-04-19
本文章向大家介绍今天一起探讨shiro实现账户同一时刻session唯一,主要包括今天一起探讨shiro实现账户同一时刻session唯一使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

  今天和同事在一起探讨shiro如何实现一个账户同一时刻只有一session存在的问题,下面小编把核心代码分享到博客园平台,需要的朋友参考下http://m.0834jl.com

  今天遇到一个项目问题,shiro如何实现一个账户同一时刻只有一session存在的问题,找了几篇文章,在这里就把核心的代码理了理,具体情况如下。

  1.假设你使用了Apache shrio ,项目要求一个账户同一时刻只能有一个用户存在,那么你就应该在你的shiro配置文件中添加以下代码:

  接下来你就应该在你的realm中添加下面的代码,这里主要是为了判断用户登录的账户是否已经登录过了。

  @Autowired private SessionDAO sessionDAO; ...............

  接下来你就应该在realm中得到shiro 的缓存中得到所有的已经登录的账户,进行判断当前用户是否已经登录

  //apache shiro获取所有在线用户 Collection sessions = sessionDAO.getActiveSessions(); for(Session session:sessions){ String loginUsername = String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY));//获得session中已经登录用户的名字 if(username.equals(loginUsername)){ //这里的username也就是当前登录的username session.setTimeout(0); //这里就把session清除, } }

  2.SessionManager

  这里有个可能出现bug的地方,可以通过配置sessionIdCookie属性,解决被服务器重写cookie中会话ID