【问题标题】:Using hashtable instead of database system使用哈希表代替数据库系统
【发布时间】:2015-06-28 05:48:22
【问题描述】:

我被要求开发一个使用 html、jsp 和 servlet 的登录系统。登录页面应要求用户输入用户 ID 和密码,并在身份验证后显示欢迎消息。还应该有添加新用户和更改现有用户密码的规定。然而,这里的问题是我被要求使用哈希表而不是数据库系统。我对用 Oracle 实现这个系统有一个相当好的想法。据我所知,在核心 java 中,哈希表/哈希图的范围是程序本身的生命周期。当程序结束时,哈希表值会丢失。如果我在 servlet 中实现 hashmap 会有什么不同吗?如果是我应该如何进行?

【问题讨论】:

  • 在 servlet 中没有任何不同。您应该要求澄清如何保存数据,顺便说一下,围绕它需要什么安全性。例如,文本文件或序列化文件都包含明文密码,这是非常不安全的。
  • 业务需求是什么。我已经知道答案了:没有
  • 从什么时候开始强制文本文件包含明文凭据@EJP
  • 这是一个家庭作业。主要是执行它。
  • @AsConfused 如果它包含加密密码,它仍然不安全,如果它包含加密或散列密码,它就不是文本文件,而是二进制文件。它们至少必须是十六进制或 base-36 或 base-64 编码。问题中没有提到这些。所有这些正是 OP 需要询问的内容。

标签: java jsp servlets hashmap hashtable


【解决方案1】:

据我所知,在核心 java 中,hashtable/hashmap 的范围是程序本身的生命周期。

不一定。这取决于您的应用程序如何处理哈希图。但是,在生命周期不超过应用程序的生命周期的意义上,您是正确的。

当程序结束时,散列表值会丢失。

正确。

如果我在 servlet 中实现 hashmap 会有什么不同吗?

没有。当应用服务器退出时,hashmap 将消失。


所以你没有问的问题是如何处理这个“要求”。我建议如下:

  • 了解登录系统的状态(即用户名和密码)是否应该在您的网络服务器重新启动时保持不变。如果没有,则使用HashMap

  • 如果需要持久化,那么您需要找到一种方法来保存HashMap 的状态而不使用数据库。有多种可能性:

    • 使用 Java 对象序列化保存数据结构并再次加载。

    • 使用“绑定”技术序列化为 XML 或 JSON 或类似的。

    • 编写一个临时机制,将数据结构保存到文件并重新加载。

问题在于以“防弹”的方式实现保存/重新加载很棘手;即在出现错误、应用程序被终止、电源故障等情况下不会丢失或损坏状态。一个像样的数据库可以处理这些事情,这就是为什么数据库是首选的实现方法。


要注意的另一件事是,以明文或加密形式存储实际密码是一种不好的做法。这适用,与您如何实现登录系统状态的持久性无关。相反,您应该将用户密码与“盐”一起散列,并将其与之前记录的散列进行比较。


这是一个家庭作业。主要是执行它。

这意味着您可能会忽略我在上面提出的安全性和稳健性问题。 (但在现实世界的系统中......你不应该!)

【讨论】:

  • 是的,谢谢您的回答,先生。我是 Java Web 开发的初学者,大约 2 周前开始学习它。所以我不太担心安全问题。如果我能够构建一个简单的应用程序,我很高兴。当然,我想及时回来,让系统更加健壮。但现在我对一个非常基本的方案感到满意。
  • 我明白了。但是,您的问题并不清楚这只是一个家庭作业。
  • 是的,那是因为我觉得我至少应该知道它在现实世界的实施中会出现的问题。而且我看到问题没有得到认真对待,因为它们只是家庭作业。
  • 家庭作业问题经常得不到认真对待是有充分理由的。很多时候,问题对答案并不真正感兴趣。通常,他们只想复制一些东西。
【解决方案2】:

您可以遵循的简单解决方案的步骤

1) 当用户注册到应用程序时,创建一个属性/文本文件并存储键值对,登录 id 为键,密码为值,或者您可以考虑 xml 或 json 格式。如果您需要一些安全性,可能会考虑使用安全散列算法。

2) 当您停止应用程序时,凭据将存储在您的文件中而不是数据库中。

3) 当应用程序下次启动时,您可以创建一个映射并从存储的文件中加载键值对,或者您可以使用 java io 直接使用属性文件来验证凭据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多