当前位置:编程学习 > JAVA >>

如何用Java实现用户登录安全问题

我想实现一个功能,就是我的页面登录后,如果用户在另一个地方登录了,在这边会提示说“用户已经在别的地方登录”,然后在边被强制退出,请问该怎么实现(我是用JSP的)?就类似QQ,你的用户在别的地方登录,你就会下线,应该怎么做呢?
还有就是:如果一个用户如果连续三次密码输入错误,就要锁定该用户15分钟内不得登录,15分钟后自动解锁,请详细说一下该如何解决这两个问题,给个例子让我看一下,谢谢了!
--------------------编程问答-------------------- 第一个问题,由于BS结构的特点是基于请求和应答的,换句话说,服务器处于被动位置,客户浏览器处于主动为止,如果你不主动发出请求,服务器是不会鸟你的,或者说,服务器根本就不知道你是谁!
要想实现你的需求,可以在JSP页面放置一个定时器,用JavaScript搞,通过Ajax异步请求服务器,做登录状态轮询,如果发现在别的地方登录了,强制下线。
这样的话,就需要一个状态保存的容器,这个自己去搞吧,实现方案很多的。

第2个问题就更简单了,登录失败时,修改计数器的值,例如设置为错误3次就锁定,那么没错误一次就减1,到0就不让登了呗,然后启动一个解锁定时器线程,在设定的时间后将这个值修改成3
这些参数都是可以人为设定的

我就讲到这,其余的你自己自由发挥吧 --------------------编程问答-------------------- to beblong:第一个问题,我认为没有必要设置定时器,当后者在其他地方登陆后,前者继续操作(request)的时候,进行判断就可以了啊 --------------------编程问答-------------------- 这个问题不错,学习中 --------------------编程问答-------------------- 具体代码不用写了吧?呵呵!
不过,原理可以说一下,就通过session控制就好了,session里定义变量就可以了!第一个,一旦登录过了,一个boolean变量已经true了,自然就知道了!呵呵!
另一个,一样是在session里定义一个变量计数就可以了,呵呵!最简单就是这样了! --------------------编程问答-------------------- study --------------------编程问答-------------------- 单点登录 CAS 
http://www.blogjava.net/xcp/archive/2010/04/13/318122.html --------------------编程问答-------------------- 学习。 --------------------编程问答-------------------- 个人感觉 4 楼的大哥说的比较好,赞同一下。期待高手的回答。。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- session判断,正解…… --------------------编程问答-------------------- 前面有人说保存session就可以了?那重启浏览器、换一台机就解除锁定了?
定时器可以不要,但登录错误次数必须保存,还要有账号是否锁定标志。 --------------------编程问答-------------------- 常用做法是SESSION对输入的账户计数。 --------------------编程问答-------------------- 关于强制下线问题:建立一个全局的Map
1.验证登陆 验证成功 判断用户是否在Map中
---如果不在Map中 将该用户名和session放到Map中
---如果在Map中 将session取出置为非法session ,将新session放入Map中

至于提醒 : 可以用Ajax 不过有点麻烦 --------------------编程问答--------------------
引用 13 楼  的回复:
关于强制下线问题:建立一个全局的Map
1.验证登陆 验证成功 判断用户是否在Map中
---如果不在Map中 将该用户名和session放到Map中
---如果在Map中 将session取出置为非法session ,将新session放入Map中

至于提醒 : 可以用Ajax 不过有点麻烦

关于用户输入密码错误问题可以提供一个解决方案:
第一次登陆时不用验证码 如果登陆出错 继续登陆就用户输入验证码
这样做有两个原因:1.如果是人为登陆 他就算是在试探密码 给出 输入也很慢 用户账户是安全的 
2.如果是恶意程序 它不能识别验证码 用户账户是安全的 

所以这个方案是很好的解决方案 --------------------编程问答-------------------- 不能用SESSION吧。 我觉得应该用上下文才行吧。 --------------------编程问答-------------------- --------------------编程问答-------------------- spring-security很好实现 --------------------编程问答--------------------
引用 4 楼  的回复:
具体代码不用写了吧?呵呵!
不过,原理可以说一下,就通过session控制就好了,session里定义变量就可以了!第一个,一旦登录过了,一个boolean变量已经true了,自然就知道了!呵呵!
另一个,一样是在session里定义一个变量计数就可以了,呵呵!最简单就是这样了!

仁兄考虑不周全,session存单点登录是不正确的,比较常用的是session与application结合使用,通过session获取与用户唯一性关联的sessionID(比如userid),存入application,以后比较的是application中有没有已经有的sessionID,详细见http://blog.csdn.net/itbasketplayer/article/details/8014727。
第二个的前提是用户名必须唯一,因为要以用户名锁定账户,你不能锁定跟你一样用户名的用户(所以很多系统都规定用户名必须唯一),然后是登录次数变量及登录时间必须记录在application中!
楼上的也说了,b/s模式没有办法,只能取最好的实现而不能完全媲美c/s模式下的这种实现。session不是万能的,也不是服务器可控的,而application才是服务器可控对象。
--------------------编程问答-------------------- 1楼的仁兄说的方法可以解决,lz不妨参考
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,