当前位置: 代码迷 >> Java Web开发 >> javaweb记住密码功能遇到的有关问题
  详细解决方案

javaweb记住密码功能遇到的有关问题

热度:72   发布时间:2016-04-16 22:15:25.0
javaweb记住密码功能遇到的问题
我这里记住密码功能是这样设计的:

1种方式.:用户首次登录成功后生成与之对应的唯一字符串,将这个唯一字符串保存到cookie中,再将这个用户所对应的其他功能(比如权限等)设计成一个map对象,放到服务器的cache中,cache的key就是这个唯一字符串,问题就出现在这里,万一server宕机了,这些cache不就丢失了吗?那怎么验证用户的合法性呀?请问有什么好的办法或其他设计,因为我这边这个登录要做很多事情,相对比较耗时。
2中方式:将用户名和密码加密放在cookie中,用拦截器判断再做登录验证,但登录是比较耗时的操作,我看其他网站几乎是秒登,请问是怎么设计的
------解决方案--------------------
一般都是采用你这第二种方式的,你可以对你的用户表做一些优化应该不会太耗时的。

或者你可以设计一种折中的方式来处理,先采用你的第一种方式(匹配cache中的数据),如果匹配成功,则自动认为登录成功,如果匹配失败,再采用第二种方式再次匹配,这样可能要稍微好些,毕竟宕机总是少数。
------解决方案--------------------
方式一就可以了,宕机就宕机嘛,你要做的好点就单独弄个缓存服务器,再做的好点就再弄个备份缓存服务器就够了。

方式二不好,不要把用户的密码的信息放本地,哪怕是家过密的。
------解决方案--------------------
引用:
方式一就可以了,宕机就宕机嘛,你要做的好点就单独弄个缓存服务器,再做的好点就再弄个备份缓存服务器就够了。

方式二不好,不要把用户的密码的信息放本地,哪怕是家过密的。


其实楼主说的这两种方式安全性基本上差距不大。
当然第二种方式里面的用户名和密码加密,用户名可以用可逆的加密方式,密码得用非可逆的加密方式。

这样在这两种情况下,只要截获到cookie的话,都是可以进入系统的,都进入系统了,还可能获取不到用户名吗,自然也是可以获取的,所以公开了用户名也没有什么,毕竟密码是搞不定的。
如果搞定了密码,那也就意味着服务器被攻陷了,那也就没有安全性可言了。

其实第一种做法就是变相的session了,只是把session中的数据放到缓存服务器了。这样确实很安全,但是他又想宕机之后也能用,那就必须得权衡了。
------解决方案--------------------
最近也在学习用户登录这东西,稍微考虑了一下单点登录和容器重启问题,结果头都大了
感觉你的第二个的本质还是和第一个一样的,用“用户名和密码”与“随机字符串”的目的不都是让服务器知道这个访问者对应的是哪个用户么,只不过用户名密码在已经数据库中,重启了也可以恢复,如果你把随机字符串在登录的时候也写到数据库里,两者实现就一模一样了。

我弄的也是用一个随机字符串来识别用户登录信息,里面包含了用户ID等一堆信息,访问的时候稍微验证一下,然后就直接拿用户缓存信息了,不存在就读数据库
------解决方案--------------------
引用:
你容器重启了咋办,缓存里的东西都没有了,难道单独弄个缓存服务器?

这时候客户端发送的cookie已能表示一个用户,再把数据读出来缓存起来呗。不单单是重启,运行时会删除缓存数据,比如lru算法、数据过期,就算有单独的缓存服务器,也是要重新去读取数据的。
------解决方案--------------------
1、兄弟,你密码准备在客户端上存几天啊,一般一个星期足矣。如果一个星期你的服务器都能宕机很多次的话,这种设计对你来说也变的多余了。

2、秒登,一般都是采用独立的密码验证服务器,只是返回一个状态而已,其他服务已经开始工作了,只需要验证服务通过其他数据就已经开始加载了。

3、兄弟如果你服务都宕机了,你就重新在服务器生成一个串,客户端也一样,作为新的缓存密码呗。