【问题标题】:Java authentication and password changing periodicallyJava 身份验证和密码定期更改
【发布时间】:2014-06-20 09:33:15
【问题描述】:

我有一个 java 应用程序,只有两个用户可以使用这个应用程序,他们之间的区别是一个可以使用菜单栏中的打印菜单,另一个不能使用他的。

为此,我制作了这个“登录”框架,其中显然包含用户名字段和密码,以及三个按钮,“连接”“取消”第三个是“更改密码”。

问题当然出在最后一个.. 应用程序实际上应该定期更改“密码”,例如每 3 个月通知用户一次,并且可以通过具有三个文本字段的 Jdialog(旧密码,新密码和确认密码)只需点击“更改密码”按钮。

这是一个“可能很愚蠢”的问题:我怎样才能让应用程序存储密码和用户名、通知用户并允许他更改密码,而这一切都不需要数据库?由于数据库已准备好使用,但我没有成功,也无权向其中添加任何内容...

顺便说一句,该应用程序是一个桌面应用程序,我搜索了身份验证插件等,但我只找到了服务器应用程序身份验证,我认为它们不是同一个概念,但我是谁说的,我只是java新手。

希望我足够澄清这个问题。并提前感谢您。

【问题讨论】:

  • 如果您可以将数据存储在数据库中会更好。但是,如果你不能,你可以看看序列化。它允许您将 Java 对象(例如,您的用户)导出到文件中。这样,您每次启动应用时都会加载序列化文件,并在每次关闭时将更新后的数据导出到文件中。
  • 为什么? IMO 定期密码重置是浪费时间,对用户来说是一个主要的烦恼。实际上没有具体的理由来更改尚未包含的密码。
  • @EJP 这对我来说是一个很长的时间,对我来说比对用户来说更令人烦恼,哈哈!但这实际上不是一个选择,“非付费客户”需要,为了更有意义,用户会定期更改密码以在 Windows 上登录他的用户帐户,以解决安全问题(顺便说一下,此应用程序适用于企业),并且该用户希望在更改用户帐户密码的同时更改应用程序的密码(顺便说一下)

标签: java authentication login passwords


【解决方案1】:

Serialization 是将对象结构和值导出到文件的过程。这使您可以保存数据的状态,并在每次启动应用时轻松重新加载。

虽然您可以将对象的每个字段的值存储在文本文件中,但如果您的对象很复杂,这可能会相当复杂。然而,序列化是自动化的,实现起来非常简单(就像在 Java 中一样),您可以在 Internet 上找到大量关于如何使用它的示例 like this one

【讨论】:

  • 这看起来不错,我会尝试并告诉反馈。虽然,部分问题仍未得到解答,但我如何使用序列化概念在正确的时间通知用户,我应该测试文件的“最后修改”字段(这似乎有点复杂)或究竟是什么。在您给我的示例中(这是一个非常好的示例),他们建议将文件保存为 .ser 文件,您认为我应该这样做还是将其保存到另一个扩展名?谢谢你的回答:)。
  • @user3610008 您可以将日期字段添加到您的用户对象。当您修改密码时,请更新此字段。每当您启动应用程序时,您都可以检查日期并通知用户哪个密码需要更新。为了解决您评论的第二部分,java 不关心扩展。 .ser 是标准的。需要注意的是,该文件可以位于任何地方,不一定在本地计算机上。 Taht 方式,您可以将您的 .ser 文件保存在服务器上,以便在用户之间同步修改。然而,它需要一些配置才能这样做
  • 感谢您的帮助,它对我有用!我还做了“通过选择更改密码”方面,它也有效,非常感谢。现在我将尝试日期字段。对于 .ser 文件,我实际上是在我的应用程序的资源中创建了它,它将包含在 jar 文件中,我将作为应用程序的最后一步部署在服务器上。我认为那会奏效。 (我从来没有在服务器上做过应用程序,但是按照逻辑,或者至少我的逻辑,我认为它会起作用)
  • @user3610008 当然,如果您的应用程序部署在服务器上,则数据同步不会有任何问题。不过要小心同时访问。祝你好运;)
  • 这正是我实际所做的!很多测试..但至少我们确信我们不会像你说的那样对同时访问有问题。
【解决方案2】:

好吧,一种方法虽然不安全,但在程序中添加一些变量,例如:userName1、userName2、password1、password2,您将在其中存储用户名和密码,它们将是静态变量你将不得不对它们进行硬编码。然后,再添加 2 个 Date 类型的变量,您将在其中存储密码更改的最后日期,然后应用您的逻辑。显然,这不是最好的解决方案,它不可扩展,如果您必须添加更多用户,将很难维护它。但是,如果您不能使用数据库(我强烈建议您这样做),那么我想这是一种方法。

【讨论】:

  • 这行不通。每次重新启动应用程序时,密码都会重置为默认值。仅当应用 24/7 运行时才有效
  • 好吧,在这里我假设程序员知道用户名和密码,所以他可以将它们作为静态变量添加到程序中(例如:password1="dfsfvsvs")。我已经说过这很难做到,但是如果他不能使用数据库,这是我想到的解决方案之一,我想听听更好的解决方案,这个问题让我很感兴趣。
  • 我将详细说明我对序列化的评论。关于您的答案的问题是,虽然您可以在运行时保留更新的密码,但由于密码是使用默认值硬编码的,您将在每次重新启动应用程序时回滚到默认值,但 OP 希望保持更新密码左右
  • 发布它作为答案,我想看看这个解决方案。另外,既然我已经考虑过了,他可以将密码写在txt文件中,该文件可以为他提供“数据库”。
  • @user3722371 这正是我一开始的想法,但后来我想像 ploutox,我需要一些保持不变的东西,而且不会是我会使用这个应用程序,用户不会'不懂它...
猜你喜欢
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2018-03-29
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多