目前遇到这样的问题:

用户登录之后,不允许同时登录多个用户(这个已经实现)。但是如果用户以外关闭了浏览器之后,要等到session超时才能 再一次登录,真是太悲剧了。

so。。。现在的解决方案便是,允许第二次登录,登录之后要将第一次登录的session销毁

借助weblogic.jar 反射获取servletContext 中的sessionContext,然后将其opensession属性中的sessionId 删除即可达到目的,代码如下:(我们的项目是将用户第一次登录的session存放到了缓存中去,在用户第二次进来的时候会先获取上一次的session,存在的话就将其从servletContext中删掉)

ServletContext scope = (ServletContext)request.getSession().getServletContext();

Class clazz = weblogic.servlet.internal.WebAppServletContext.class;

Field f = clazz.getDeclaredField("sessionContext");

f.setAccessible(true);

//--取得session context

weblogic.servlet.internal.session.SessionContext sc = (weblogic.servlet.internal.session.SessionContext)f.get(scope);

clazz = weblogic.servlet.internal.session.SessionContext.class;

f = clazz.getDeclaredField("openSessions");

f.setAccessible(true);

//--拿到终的sessionMap

Hashtable sessionMap = (Hashtable)f.get(sc);

//第一种直接删除该sessionID

System.out.println("要删除的sessiongid "+loginSession.getId()+"==========================");

System.out.println("sessionMap 中是否含有将要删除的id"+ sessionMap.containsKey(loginSession.getId().split("!")[0])+"================");

sessionMap.remove(loginSession.getId().split("!")[0]);

效果:

打开一个浏览器登录xxx用户

再打开一个浏览器登录xxx用户

然后再在第一个浏览器中点击任意链接会跳转到登录页面。

---------------------------新增问题

以上逻辑适用于同一台服务器或着同一台服务器上的集群 均可以实现。

但是:

我们的系统由于用了webloic部署了集群(集群在多台服务器上)之后,上面的逻辑便不适用了,所以给出以下解决方案。

因为集群是weblogic 做的,对于session的保持,销毁都可以从weblogic获知。

目前做出的方案是: 登录的时候在membercache保存当前sessionid ,通过拦截器对比membercache中的值跟当前session的值,如果不一样,利用ServletAuthentication.invalidateAll(request) 销毁session即可

转载于:https://blog.51cto.com/2240844/1302873

用户二次登陆,干掉第一次登录的session相关推荐

  1. linux新用户登陆密码,如何强制Linux用户在第一次登录时更改初始密码?

    在多用户Linux环境下,创建使用某个随机默认密码的用户帐户是标准做法.之后在成功登录后,新用户可以将默认密码更改成自己的密码.出于安全方面的原因,常常建议"迫使"用户在第一次登录 ...

  2. Android基础学习总结(十二)——利用Bmob实现用户账户体系(注册、登录、验证等)

    前言 用户是一个应用程序的核心.对于个人开发者来说,自己的应用程序积累到越多的用户,就会给自己带来越强的创作动力.因此Bmob提供了一个专门的用户类--BmobUser来自动处理用户账户管理所需的功能 ...

  3. 用户第一次登录后要求修改密码

    对于linux管理员而言,一些开发人员在便于排查故障时候需要服务器的登录权限,除了网络权限开放外,第二道防线就是服务器的用户登录权限,,而开发人员的安全意识单薄下,需要进一步保护普通用户的登录权限,因 ...

  4. mysql5.7 首次登陆_mysql5.7.20第一次登录失败的快速解决方法

    一,将介绍如何 (1)mysql5.7是有默认密码的 查找默认密码 grep 'temporary password' /var/log/mysqld.log (2)第一次登录 mysql -uroo ...

  5. Spring Boot项目学习06之用户登陆模块与登录拦截器

    1.登陆功能基本思路 首先,在数据库中查询这条用户记录,如果不存在这条记录则表示身份验证失败,登录流程终止:如果存在这条记录,则表示身份验证成功,接下来则需要进行登录状态的存储和验证了,用户登录成功后 ...

  6. discuz登陆首页后提示style_1_commen.css,关于Discuz用户面板必须刷新才能显示登录状态的问题解决办法...

    有些使用Discuz的用户,当用户登录后,页面没有显示登录状态,需要刷新一下页面才能正常显示登录状态,出现这样的原因是因为Discuz的登录状态是由js控制的,所以当js没有更新,那么使用的还是浏览器 ...

  7. 二维码扫码登录是什么原理?

    在日常生活中,二维码出现在很多场景,比如超市支付.系统登录.应用下载等等.了解二维码的原理,可以为技术人员在技术选型时提供新的思路.对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二 ...

  8. 细说二维码扫码登录的原理

    前言 在日常生活中,二维码出现在很多场景,比如超市支付.系统登录.应用下载等等.了解二维码的原理,可以为技术人员在技术选型时提供新的思路.对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的 ...

  9. 聊聊二维码扫码登录的原理

    点击上方 "大数据肌肉猿"关注, 星标一起成长 后台回复[加群],进入高质量学习交流群 2021年大数据肌肉猿公众号奖励制度 原文:https://juejin.cn/post/6 ...

最新文章

  1. windows服务程序设置为自动 重启后又变为手动启动_系统小技巧:解决Windows无法正常关机的问题...
  2. Ext.tab.Panel页签
  3. Ruby中如何识别13位的时间戳
  4. 学习微信公众号oauth2.0
  5. 微型计算机原理及其应用彭楚武答案第三章,微机原理及其应用_第1章.ppt
  6. 手写Java的字符串简单匹配方法IndexOf()
  7. python快速入门教程-终于理解python快速入门教程
  8. ora-01031:insufficient privileges解决方法总结
  9. win10外放与耳机不能够自动切换没有声音的问题 声卡问题
  10. cdr添加节点快捷键_cdr x6快捷键大全 cdr x6(coreldraw x6)快捷键汇总
  11. 软件工程知识点总结——第一、二部分
  12. Unity Editor编辑器实用扩展
  13. 夜深人静, 看看编程人生
  14. 长沙社区团购独角兽《兴盛优选》 18k 面试题记录,已拿offer!
  15. 摄像头各参数的意义_监控摄像头各种基本参数名称说明
  16. (ECCV 2022)E-NeRV: Expedite Neural Video Representation with Disentangled Spatial-Temporal Context
  17. 解压jar包修改配置文件,解压、修改、压缩、运行
  18. Shader学习笔记(三)学习Shader所需的数学基础
  19. Python之CSV文件操作
  20. Unity虚拟相机Cinemachine教程

热门文章

  1. python36+centos7离线安装tensorflow与talib的方法
  2. oracle的cv函数,cv_wait 和 cv_timedwait 函数
  3. python调用摄像头转向_教你如何利用python调用摄像头
  4. win10很多软件显示模糊_win10安装软件出现乱码怎么办 win10新装软件显示乱码的解决方法_windows10_Windows系列_操作系统...
  5. 【pip install psycopg2安装报错】Error: pg_config executable not found.
  6. 天翼云从业认证(1.3)了解数据库的概念、SQL、关系型数据库、大数据和 NoSQL 数据库
  7. 笔记-信息系统安全管理-信息系统的安全属性
  8. 笔记-项目配置管理-配置项
  9. 笔记-高项案例题-2018年上-计算题
  10. 项目成本管理:制订项目成本管理计划