我被要求使用html,jsp和servlets开发登录系统。登录页面应该询问用户用户ID和密码,并且在身份验证后应显示欢迎消息。还应该有添加新用户和更改现有用户密码的规定。然而,这里的问题是我被要求使用哈希表而不是数据库系统。我对使用Oracle实现此系统有一个相当好的想法。据我所知,在核心java中,散列表/散列映射的范围是程序本身的生命周期。当程序结束时,散列表值会丢失。如果我在servlet中实现一个hashmap,它会有所不同吗?如果我应该如何继续?
答案 0 :(得分:1)
据我所知,在核心java中,散列表/散列映射的范围是程序本身的生命。
不一定。这取决于您的应用程序如何处理hashmap。但是,您的生命周期不再而不是应用程序的生命周期,这是正确的。
当程序结束时,散列表值丢失。
正确。
如果我在servlet中实现一个hashmap,它会有所不同吗?
没有。当appserver退出hashmap时将会消失。
所以你没有问的问题是如何处理这个“要求”。我建议如下:
确定登录系统的状态(即用户名和密码)是否应该在重新启动网络服务器时持续存在。如果没有,则使用HashMap
。
如果需要保留,那么您需要找到一种方法来保存HashMap
的状态而不使用数据库。有各种可能性:
使用Java Object Serialization保存数据结构并重新加载。
使用“绑定”技术序列化为XML或JSON或类似技术。
编写一个临时机制,将数据结构保存到文件中并重新加载。
问题是以“防弹”的方式实施保存/重新加载是很棘手的;即,如果出现错误,应用程序被杀死,电源出现故障等情况,将不会丢失或损坏状态。一个像样的数据库处理这些事情,这就是数据库是首选实现方法的原因。
另一件需要注意的是,以明文或加密方式存储实际密码是不好的做法。这适用于您实现登录系统状态持久性的方式。相反,您应该将用户的密码与“salt”一起散列,并将其与先前记录的散列进行比较。
它是一项家庭作业。主要是实施它。
这意味着您可能会忽略我上面提到的安全性和健壮性问题。 (但在现实世界的系统中......你不应该!)
答案 1 :(得分:0)
您可以遵循简单解决方案的步骤
1)当用户注册到应用程序时,创建属性/文本文件并将键值对以登录ID作为键和密码存储为值,或者您可以考虑xml或json格式。如果您需要考虑使用安全散列算法,可能需要考虑安全性。
2)当您停止应用程序时,凭据将存储在您的文件中而不是db。
3)当应用程序启动时,您可以创建一个映射并从存储的文件中加载键值对,或者您可以直接使用java io的属性文件来验证凭据。