java 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox
需求就是 不同意同一个账户同一时间登录系统。仅仅要有一个账户在线其它人就是不能用这个账户。
功能非常easy,过程非常纠结 。
这篇文章攻克了兼容IE、Firefox 浏览器下,不同IP 地址 同一用户同一时候登陆的解决的方法,包含应对浏览器没有正常关闭的情况。
说下解决过程,本来以为用session存取就好了,后来仅仅能在同一个浏览器内标签窗体好用。跨浏览器就不行。由于sessionId不一样。(经測试 跟sessionID 没关系 )
网上找了一些解决的方法。又是些监听器 又是写 方法的; 又是数据库加字段推断状态的。 。。。。都没用 。。。如今反倒认为 太复杂了 ,全然不是必需。
由于真的遇到了断电情况,数据库的字段就没办法改动状态了,直接Pass掉。至于关闭窗体的“X” 而不是选择了“退出”button这个功能能够通过JS 控制。轻松解决。
实现方法: 在action 中 加入静态变量 map 数组存储 登录的用户信息 ,先推断是否存在该用户信息的记录情况,有该用户信息就不让 登录了,没有加入到map。就这么简单。
第二个所谓的难点呢 就是假设浏览器选择了“X”button 而不是退出button。须要在页面加入JS 辅助 进后台 清理session 缓存 和 map 数据信息;触发退出方法清理session信息和Map 内的该用户信息。
(本地浏览器有3种,chrome /ie /firefox ; ie/firefox 已解决关闭窗体的“X” 功能;chrome 还未找到解决的方法,chrome 碰到的问题就是 用户登录进来之后 首先运行了以下的js 进后台清空session 信息 然后竟然又登录进来了。ie一開始也这样。后来加了ie浏览器推断就攻克了。假设高人看到了这篇文章,欢迎指点一二)。
$(window).bind('beforeunload',function(){
var isIE = /msid/i.test(navigator.userAgent) && !window.opera;
if(isIE){
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth -20;
if(window.event.clientX >360 && window.event.clientY < 0 || window.event.altKey){
//关闭事件
$.ajax({
url :"exitLogin.action", //后台action,清理掉session 数据
type:"post",
success:function(){
alert("您已退出登录");
}
});
}else{
//是刷新事件
}
}else{ //firefox
$.ajax({
url :"exitLogin.action", //后台action,清理掉session 数据
type:"post",
success:function(){
alert("您已退出登录");
}
});
}
});
最后由于session 超时的话 map 没有进行清理。用户登录的时候先要去map 中批对 信息,这样就没办法登录了。 所以再在 页面上加个定时器 。定时清理一下map 中的数据就能够了。
java 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox的更多相关文章
- java正则表达式提取地址中的ip和端口号
由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...
- java代码获取客户端的真实ip
java代码获取客户端的真实ip protected String getIpAddr(HttpServletRequest request) { String ip = request.getHea ...
- java获取本机名称、IP、MAC地址和网卡名称
java获取本机名称.IP.MAC地址和网卡名称 摘自:https://blog.csdn.net/Dai_Haijiao/article/details/80364370 2018年05月18日 1 ...
- 用Java来获取访问者真实的IP地址
用Java来获取访问者真实的IP地址 转载 2016年06月07日 14:36:02 标签: 16497 编辑 删除 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAdd ...
- java单点登录系统CAS的简单使用
转:http://blog.csdn.net/yunye114105/article/details/7997041 背景 有几个相对独立的java的web应用系统, 各自有自己的登陆验证功能,用户在 ...
- java J2EE与DiscuzX3.2的UCenter实现单点登录
最近笔者在实现Java项目对discuz的整合.在此过程中,查了很多这方面的资料,发现网上并没有说得比较全面的文章.笔者博取众长以及自己在此过程中遇到的问题,写下来供大家参考,希望大家可以在这过程中少 ...
- Linux 禁止用户或 IP通过 SSH 登录
一切都是为了安全,做到来着可知! 限制用户 SSH 登录 1.只允许指定用户进行登录(白名单): 在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers ...
- 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...
- 【Java进阶面试系列之一】哥们,你们的系统架构中为什么要引入消息中间件?
转: [Java进阶面试系列之一]哥们,你们的系统架构中为什么要引入消息中间件? **这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题. 这里大家可以关 ...
随机推荐
- SAE下的Memcache使用方法
SAE里面有Memcache,可以较大幅度改善数据库的鸭梨~ 之前一直想学习Memcache,却愁于不知如何下手,对这个名词完全没有概念,同时在SAE的文档里面,也很少对于Memcache的使用教程~ ...
- Jason 分享吴霁虹教授的产品模型
产品的出现都是为了解决市场上存在的某一个”疼点“或一系列的”疼点“而出现. 疼点:是一个亟需待解决的问题,对应有相应的市场,会寻找相应的解决方案.比如:用户的小孩——>因为缺钱,所以担心小孩无法 ...
- [HDU1017]Exact cover[DLX][Dancing Links详解][注释例程学习法]
Dancing Links解决Exact Cover问题. 用到了循环双向十字链表. dfs. 论文一知半解地看了一遍,搜出一篇AC的源码,用注释的方法帮助理解. HIT ACM 感谢源码po主.链接 ...
- 2.1 Java I/O简史
Java 1.0 到 1.3 中的 IO 没有而 Java 1.4 中引入的 NIO 有的“改进”:非阻塞IO.缓冲区.通道层.字符集.内存数据.Perl(正则表达式之王): 下一代 I/O-NIO. ...
- Java Tomcat 中调用.net DLL的方法
近日一个java的项目,客户要求项目中必须使用其提供的加密机制,扔给了两个.net写的DLL.网络上搜了一圈也没找到啥东西,甚至看到人扬言此事绝无可能.郁闷当中考虑了一个思路.用C#做一个Com,调用 ...
- sqlalchemy--group_concat的使用
今天,一个app客户端同事需要我服务器端提供一组数据,这组数据要按类分好,把整个结构都展示给他,他直接使用就可以了.数据大概如下面这种: 同事需要的结构大概就是类型1有多少,分别是什么;类型2有多少, ...
- jQuery CSS3 照片墙
<html> <head> <style type="text/css"> .picture-wall-container{ position: ...
- Core Data-备用
Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...
- recovery编译汉化
当BoardConfig.mk中定义了recovery的字体且为中文字体时,自动编译为中文版,否则编译为英文版 例如: BOARD_USE_CUSTOM_RECOVERY_FONT := \" ...
- 如何使用Reaver-PJ-Wi-Fi网络的WPA密码
在正式开始之前,我还是要不厌其烦强调一下:知识就是力量,但是拥有力量不代表着可以为所欲为.触犯法律.同样,骑白马的不一定是王子,会开锁的也不一定是小偷.本文只是关于某些技术的实验与验证,只适用于学习. ...