主流的网站都是限制用户单点登录的,为什么要实现单点登录?

1、避免单账号多用户操作占用大量数据库连接,减轻webserver的压力;

2、安全防范,强制下线非法用户;

传统的web服务器(如tomcat)对session有专门的管理,我们通过session来控制用户的登录生存周期。单点登录原理如下:

1、将当前的session以Collections的形式缓存在application当中,用户产生新的session,即清除用户之前的session,保证collection里面的usersession都是唯一的;

2、实现效果每次用户登录都会挤掉之前用户的登录,每个用户只能唯一在线;

1 ServletContext application =request.getSession().getServletContext();2 Collection sessions = null;3 if (application.getAttribute("usercount") == null) {4 sessions = new ArrayList();5 application.setAttribute("usercount", sessions);6 } else{7 sessions = (Collection) application8 .getAttribute("usercount");9 }10 newLoginManager().login(sessions, session);11 SessionHandler.handleSession(session);

1 public static booleanisLogin(HttpServletRequest request) {2 TuserEntity tuser =getUser(request);3

4 if(tuser!=null){5 Map map = (Map) request.getSession()6 .getServletContext().getAttribute("sessionMap");7 if(map.get(tuser.getLogname())==null){8 request.getSession().invalidate();9 return false;10 }11 }12 return getUser(request) != null;13 }

LoginManager.java

1 public classLoginManager {2

3 public HttpSession login(Collectionsessions,4 HttpSession session) {5 ArrayList sessionde = new ArrayList();6

7 for(HttpSession s : sessions) {8 try{9 int historyuser = ((TuserEntity) s.getAttribute("user_session")).getId();10 int nowuser = ((TuserEntity) session.getAttribute("user_session"))11 .getId();12 if (historyuser ==nowuser) {13

14 sessions.remove(s); //移除集合中的重复session元素

15

16 if(!s.equals(session)){17 s.invalidate();//废弃之前登陆的session

18 }19 break;20 }21

22 } catch(Exception e) {23 //e.printStackTrace();

24 sessionde.add(s);25 }26

27 }28 for (int i = 0; i < sessionde.size(); i++) {29 sessions.remove((HttpSession) sessionde.get(i));30 }31 sessions.add(session);32 return null;33 }34 }

新增和废弃ServletContext里面的sessionMap的用户session

1 public static voidhandleSession(HttpSession session) {2 try{3 Map sessionMap = (Map) session.getServletContext().getAttribute("sessionMap");4 TuserEntity tuser =(TuserEntity) session.getAttribute(Keys.USER_SESSION_KEY);5 if(sessionMap.get(tuser.getLogname())!=null){6 sessionMap.remove(tuser.getLogname());7 }8 sessionMap.put(tuser.getLogname(), session);9 } catch(Exception e) {10 System.out.println("session error!");11 }12 }

1 public voidsessionDestroyed(HttpSessionEvent se) {2 Map sessionMap = (Map) se.getSession().getServletContext().getAttribute("sessionMap");3 TuserEntity tuser =(TuserEntity) se.getSession().getAttribute(Keys.USER_SESSION_KEY);4 if(tuser!=null){5 sessionMap.remove(tuser.getLogname());6 }7 }

java 登录下线_单机登录实现思路(强制下线其他用户)相关推荐

  1. android仿qq强制下线服务器,qq强制下线(实现一个类似QQ的强制下线功能)

    qq强制下线(实现一个类似QQ的强制下线功能),哪吒游戏网给大家带来详细的qq强制下线(实现一个类似QQ的强制下线功能)介绍,大家可以阅读一下,希望这篇qq强制下线(实现一个类似QQ的强制下线功能)可 ...

  2. java第三方登录接口_第三方登录接入-qq,weibo-java

    开发之前 需求:网站接入qq,sina微博登录,本文最后付效果图: 说明:大部分网站本身是需要用户概念的,很多操作依附于用户,而qq或微博作为一种登录方式指向用户而已,我参考了一下其他网站的做法, 一 ...

  3. 微信登录画面_微信登录界面的地球变了_微信登录界面首变真相

    细心的小伙伴发现在启动微信的时候,那个经典的一个小人剪影面对着地球的画面开始发生了一些变化,似乎云层变得更为清晰细致了.微信登录界面6年来首变化,那么为何改变来的如此突然呢,下面小编就分享给大家! 手 ...

  4. java越权发送邮件_已登录用户 越权 访问action方法怎么解决?

    你把登录的form的action指向一个asp文件,如check.asp.那么这个文件的内容如下:(注:data.mdb是你的数据库所在目录,login.asp是你成功登录以后所指向的页面,user是 ...

  5. python保持登录状态_“保持登录状态”-最佳方法

    小编典典 好的,让我直言不讳:如果您为此目的将用户数据或从用户数据派生的任何内容放入cookie,则表示您做错了. 那里.我说了.现在我们可以继续实际的答案了. 您问哈希用户数据有什么问题吗?好吧,它 ...

  6. python 登录新浪微博_模拟登录新浪微博(Python)

    PC 登录新浪微博时, 在客户端用js预先对用户名.密码都进行了加密, 而且在POST之前会GET 一组参数,这也将作为POST_DATA 的一部分. 这样, 就不能用通常的那种简单方法来模拟POST ...

  7. 微信登录画面_微信登录界面改版,美炸了!

    今天哎妹问小伙伴,更新微信新版本了吗?小伙伴淡定的看了我一眼说,没有啊,咋的了.新版的微信登录的时候,地球气象云图会动了啊!真的假的?我去看看去. 看一眼新旧版对比图.↓↓↓ 旧版(左)与新版(右) ...

  8. 仙剑奇侠传四服务器维护,《仙剑奇侠传四》无法登录怎么办_无法登录解决办法_3DM手游...

    <仙剑奇侠传四>手游进不去怎么办?有些小伙伴玩游戏会遇到黑屏闪退进不了游戏的问题,那么为什么会出现这种状况呢?有什么解决办法吗?下面就和小编一起来了解下仙剑奇侠传4手游黑屏闪退解决办法吧. ...

  9. java判断用户是否在某一个区域登录_单点登录实现原理

    一.单点登录概念 什么是单点登录?单点登录全称 Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部 ...

最新文章

  1. 关于监控拾音器测试对比的一些小建议
  2. verdi使用linux命令,verdi工具的使用
  3. php导出页面word,php导出生成word的方法_PHP
  4. Tomcat介绍及性能优化
  5. JavaScript高级程序设计(第3版)手写第一天。2019年2月23日,星期六
  6. 【Python学习系列二】Python默认编码和Eclipse环境的冲突问题
  7. 将近400篇原创后,有三AI喊你正式加入来不来?
  8. 线段树杭电1754 I hate it
  9. wxpython多个面板_wxpython笔记:wxPython的布局管理实践【嵌入matplotlib、页面切换】...
  10. 排序算法二:归并排序(Merge sort)
  11. 【数据结构与算法】之深入解析“不同路径II”的求解思路与算法示例
  12. Anaconda 安装
  13. [hackinglab][CTF][脚本关][2020] hackinglab 脚本关 writeup
  14. U3D 平行光阴影细节 Directional Shadow Details
  15. [转载] AUML——FIPA Modeling Technical Committee
  16. Arcgis制作行政区划矢量文件(shp格式)
  17. access-control-allow-origin php,php header(Access-Control-Allow-Origin: *) 无效
  18. python求解函数偏导数sympy
  19. 暑期开箱评测Wifi Pineapple(大菠萝)
  20. 恶意流量监测开源系统:Maltrail

热门文章

  1. 英方软件通过注册:预计年营收2亿 为胡军擎与江俊夫妻店
  2. EasyExcel实现excel导入
  3. [网络安全学习篇22]:kali中间人攻击(千峰网络安全视频笔记 p111-p113)
  4. js 设置video宽度_video设置视频的宽高
  5. mysql CONVERT 类型转换
  6. unity AR3D物体识别
  7. WebAPIs-day6
  8. (转)以太坊(Ethereum)创世揭秘 以太坊(Ethereum)创世揭秘
  9. 【seafile服务器配置】
  10. 基于android p深度定制的miui,Redmi K30 Pro推送MIUI 12.2.1稳定版:基于Android 11深度定制...