日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shiro注销其他用户_Shiro实现互斥登录,并踢出登录用户功能。

發布時間:2024/4/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shiro注销其他用户_Shiro实现互斥登录,并踢出登录用户功能。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為一名小白,初遇到這種業務也著實頭疼了一段時間。經歷了各種查資料,總結出了一個相對簡便的方法。

首先在登陸之后使用

Collection list = sessionDAO.getActiveSessions();

方法獲取到所有登錄的用戶,循環該list,取到集合中單個的session對象

Subject s = new Subject.Builder().session(session).buildSubject();

獲取到subject, 然后s.isAuthenticated()判斷該subject是否通過驗證。

User user = (User) s.getPrincipal();

獲取到登錄用戶,然后判斷當前登錄用戶是否存在于已登錄用戶中,自己的user.getid 等于 循環出的user.getid的話說明用戶已經登錄了。

這時可以給session加個標識,標識已經踢出了。

這里是我寫的例子。

Collection list = sessionDAO.getActiveSessions();

String principal= (String)token.getPrincipal();

for (Session session: list) {

Subject s = new Subject.Builder().session(session).buildSubject();

if (s.isAuthenticated()) {

User user = (User) s.getPrincipal();

if(user!=null){

if (user.getCode().equals(principal)) {

if (!session.getId().equals(

getSession().getId())) {

//session.setAttribute("error", "賬號重復登錄!");

session.setAttribute("kicked", true);

}

}

}

}

}

至于為什么加標識而不是直接注銷之前登錄的用戶呢,因為這里注銷的話用戶那里莫名其妙的就自己退出了,用戶根本不知道發生了什么,所以最好建立個file提示一下再注銷。

Filter中首先先判斷kicked是否為true,不為true就直接放過吧

然后判斷是否是ajax請求

booleanisAjax=req.getHeader("X-Requested-With")!=null&& "XMLHttpRequest".equals(req.getHeader("X-Requested-With").toString());

如果不是ajax請求的話

String str = "

+ "window.top.location.href='"

+ url

+ "';";

session.setAttribute("kicked", false);

PrintWriter out = response.getWriter();

out.print(str);

out.flush();

out.close();

若是ajax請求,那么就要返回json數據啦

Map map = new HashMap();

map.put("login_status","300");

map.put("message","您的賬號在異地登錄,如非本人操作請盡快修改密碼!");

String resJSON = JSON.toJSONString(map);

out.print(resJSON);

前端js要配合一下

if(result.login_status == 300){

layer.msg(result.message);//您的賬號在異地登錄....

//?然后跳轉網頁

}

這樣既可實現互斥登錄功能。

一個很基礎很簡單的方法,在此寫下博客記錄下來,用于提醒自己,以及幫助以后會遇到這樣的問題的人。O(∩_∩)O~。。。

總結

以上是生活随笔為你收集整理的shiro注销其他用户_Shiro实现互斥登录,并踢出登录用户功能。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。