1. SpringBoot + Shiro實現(xiàn)當前在線人數(shù)統(tǒng)計

        共 2166字,需瀏覽 5分鐘

         ·

        2020-10-18 04:29

        點擊上方藍色字體,選擇“標星公眾號”

        優(yōu)質(zhì)文章,第一時間送達

        ? 作者?|??編程小白-郭旭

        來源 |? urlify.cn/jaayq2

        66套java從入門到精通實戰(zhàn)課程分享

        實現(xiàn)思路

        數(shù)據(jù)庫中添加用戶是否登錄is_login字段,用來記錄用戶的登錄狀態(tài),假設1表示在線;0表示未在線,則需要進行控制:

        1)當用戶登錄成功時,設置用戶登錄狀態(tài)為1

        2)當用戶退出登錄時,設置用戶登錄狀態(tài)為0

        3)當session失效時,設置對應的用戶的登錄狀態(tài)為0

        實現(xiàn)方法

        1、更改數(shù)據(jù)庫字段,編寫登錄狀態(tài)更新函數(shù)

        添加字段后,編寫狀態(tài)更新函數(shù)

        /**?更改用戶登錄狀態(tài)?*/
        void?updateLoginStatus(@Param("userId")?String?userId,?@Param("islogin")?Integer?islogin);
        "updateLoginStatus">
        ????????UPDATE?`user`?SET?`islogin`=#{islogin}?WHERE?id?=?#{userId}

        2、自定義SessionLinstener,重寫監(jiān)聽函數(shù)

        自定義一個類ShiroSessionLinstener,繼承SessionLinstenerAdapter類,同時重寫監(jiān)聽函數(shù)

        1)session創(chuàng)建時,輸出sessionId,不進行任何操作

        2)session停止時,輸入sessionId和session存儲的用戶Id,不進行任何操作

        3)session失效時,輸入sessionId,重置對應的用戶的登錄狀態(tài)為0

        public?class?ShiroSessionListener?extends?SessionListenerAdapter?{

        ????@Resource
        ????private?UserService?userService;

        ????//?session創(chuàng)建
        ????@Override
        ????public?void?onStart(Session?session)?{
        ????????super.onStart(session);
        ????????System.out.println("session創(chuàng)建,sessionId:"?+?session.getId());
        ????}

        ????//?session停止
        ????@Override
        ????public?void?onStop(Session?session)?{
        ????????System.out.println("session停止,sessionId:"?+?session.getId()?+",用戶id:"?+?session.getAttribute("loginUserId"));
        ????}

        ????//?session失效
        ????@Override
        ????public?void?onExpiration(Session?session)?{
        ????????//?重置登錄狀態(tài)
        ????????userService.updateLoginStatus(session.getAttribute("loginUserId").toString(),?LoginStatusEnum.NOT_LOGIN.getCode());
        ????????System.out.println("session失效,sessionId:"?+?session.getId()?+",用戶id:"?+?session.getAttribute("loginUserId"));
        ????}

        }

        3、配置session監(jiān)聽及屬性(均通過SessionManager進行配置)

        1)使用setGlobalSessionTimeout(1800000L)設置session的過期時間為30分鐘(可自定義)

        2)使用setSessionValidationSchedulerEnabled(true)開啟session檢查

        3)使用setSessionValidationInterval(15?*?60?*?1000L)設置檢查間隔為15分鐘

        4)設置監(jiān)聽類為第2步自定義的類

        Collection?listeners?=?new?ArrayList<>();
        listeners.add(shiroSessionListener());
        sessionManager.setSessionListeners(listeners);

        ?最后不要忘記把SessionManager配置到ShiroConfig中

        4、編寫查詢函數(shù)查詢在線人數(shù)

        /**?獲取在線人數(shù)?*/
        Integer?getLoginCount();
        "getLoginCount"?resultType="java.lang.Integer">
        ????SELECT?count(1)?FROM?`user`?WHERE?`is_login`?=?1







        粉絲福利:108本java從入門到大神精選電子書領取

        ???

        ?長按上方鋒哥微信二維碼?2 秒
        備注「1234」即可獲取資料以及
        可以進入java1234官方微信群



        感謝點贊支持下哈?

        瀏覽 36
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. а√中文在线资源库 | 无码三级片在线视频 | 含羞草实验室隐藏路径2023 | 国语自产少妇精品视频 | 小说h视频 |