zoukankan      html  css  js  c++  java
  • 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;
        }
    

      

  • 相关阅读:
    ASP.Net软件工程师基础(四)
    ASP.Net软件工程师基础(三)
    ASP.Net软件工程师基础(二)
    ASP.Net软件工程师基础(一)
    SVN小小用法(一)svn服务器搭建
    必须声明标量变量
    用户 NT AUTHORITYNETWORK SERVICE 登录失败
    winmail安装完成后,SMTP/POP3/ADMIN/HTTP/IMAP/LDAP服务不能启动?
    CF-798C
    CF-798B
  • 原文地址:https://www.cnblogs.com/honour1207/p/14010186.html
Copyright © 2011-2022 走看看