<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2166字,需瀏覽 5分鐘

           ·

          2020-10-18 04:29

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

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

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

          來源 |? 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
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲在线中文字幕 | 影音先锋婷婷 | 伊人骚逼| 亚洲AV无码秘 翔田 | A∨视频在线免费观看 |