2020年11月20日星期五

shiro利用过期时间,解决用户冻结踢出问题

背景

  shiro中需要冻结某个用户,但是此时此刻这个用户在线,如果冻结只是改变状态的话,只会导致用户不满,所以要改变这个办法.

  在查找过程中发现都是告诉shiro写自定义过滤器,那么我如果自定义过滤器我就不太想用shiro了,难道shiro中只能用自定义过滤写这个吗?

 

解决

  利用shiro依靠的session,来进行一个session过期,让用户重新登陆,用户登陆就会发现自己被冻结。

  代码如下,解释一下为什么我自己去获取这个SessionDao,原因是springboot注入的SessionDao总是有问题。

  public void invoking(Long userId) 
  { Session sessionByUsername = getSessionByUsername(userId); //设置过期实践为1毫秒 if (sessionByUsername != null)
     { sessionByUsername.setTimeout(1); } }

  

 /**  * 获取指定用户名的Session  * @param userId  * @return  */ public Session getSessionByUsername(Long userId) {  DefaultWebSecurityManager securityManager = (DefaultWebSecurityManager)SecurityUtils.getSecurityManager();  DefaultWebSessionManager sessionManager = (DefaultWebSessionManager) securityManager.getSessionManager();  SessionDAO sessionDAO = sessionManager.getSessionDAO();  Collection<Session> sessions = sessionDAO.getActiveSessions();  User user;  Object attribute;  for (Session session : sessions) {   attribute = session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);   if (attribute == null) {    continue;   }   user = (User) ((SimplePrincipalCollection) attribute).getPrimaryPrincipal();   if (user == null) {    continue;   }   if (userId.equals(user.getAccount())) {    return session;   }  }  return null; }

  

 

原文转载:http://www.shaoqun.com/a/490635.html

外贸圈:https://www.ikjzd.com/w/1083

krazy:https://www.ikjzd.com/w/1801

cb体系:https://www.ikjzd.com/w/2063


背景  shiro中需要冻结某个用户,但是此时此刻这个用户在线,如果冻结只是改变状态的话,只会导致用户不满,所以要改变这个办法.  在查找过程中发现都是告诉shiro写自定义过滤器,那么我如果自定义过滤器我就不太想用shiro了,难道shiro中只能用自定义过滤写这个吗?解决  利用shiro依靠的session,来进行一个session过期,让用户重新登陆,用户登陆就会发现自己被冻结。  代码如
网上1号店:网上1号店
拍拍网服装:拍拍网服装
少妇口述:那一场"三人共室"的游戏:少妇口述:那一场"三人共室"的游戏
丽江最有特色的小吃有哪些?:丽江最有特色的小吃有哪些?
峨眉山素席 - :峨眉山素席 -

没有评论:

发表评论