4

我希望不要重新发明轮子——我对 Java 还很陌生,但我需要一个简单但强大的算法/代码/软件来为 Web 应用程序的用户执行电子邮件验证(例如,我只需要帮助下面的第 4 步)。也就是说,我需要验证登录用户是否可以访问他/她在登录期间提供的电子邮件地址。

我为 Java 中间层考虑的步骤是:

  1. Java POJO 从客户端接收用户的电子邮件和密码。
  2. POJO 与数据库服务器对话以验证电子邮件/密码组合是否有效。
  3. 如果有效,POJO 会向该电子邮件地址发送一封电子邮件,要求用户回复电子邮件(或单击某些提供的链接等)
  4. POJO 收到通知(如何?)用户已回复电子邮件(或单击链接等)。
  5. POJO 通知 Web 应用程序认证成功(或失败),从而允许或拒绝对应用程序的访问。

除了第 4 步,我什么都可以写。本质上,我需要一种方法来向用户发送电子邮件,然后接收某种类型的响应,表明用户收到了电子邮件。

任何人都知道如何做到这一点?如果不是,您推荐什么作为下一个最佳/最简单的解决方案?

我没有使用框架,因为我的 Java 中间层非常简单。我想保持解决方案的精简(意思是,不想安装/实施超过我需要的东西;Spring 似乎矫枉过正)。我阅读了Shiro,但没有找到任何支持电子邮件身份验证的证据。非常感谢任何建议,以帮助我避免编写不必要的/未经证实的例程。

4

2 回答 2

2

涉及两个控制器(两个 POJO)。

第一个连接,对于步骤 1,2+3,与服务器中的一个对象进行对话。作为 (2) 的一部分,生成唯一代码(注释中提到的 UUID)并将其保存到数据库中。

第二个连接,当用户单击链接时,转到另一个控制器(另一个 POJO,可能是同一个类,也可能是不同的类,具体取决于您的实现)。它从链接中读取 UUID,进入数据库,找到与 UUID 关联的电子邮件,并将电子邮件标记为已验证。

更新我正在努力查看您缺少的内容,但是当用户单击电子邮件中的链接时,操作系统会打开 Web 浏览器。Web 浏览器与服务器建立连接。服务器接收到 URL 中带有 UUID 的 HTTP GET 请求,并将 UUID 传递给 POJO。

更多术语:在网络服务器中处理传入请求的过程通常称为“路由”,用于构造代码的一般模式称为“MVC”。确切的细节将取决于您使用的应用程序框架。对于基于 servlet 的 java 代码,存在从 URL 到 servlet 的映射(servlet 是实现某个接口的 java 代码 - 框架可能会提供 servlet,它最终会调用您所调用的 POJO,或者您可以自己编写 servlet,在这种情况下那将是您的 POJO,尽管在这种情况下它是用词不当,因为它实现了 web.xml 文件中的特定接口。

另外,我猜,客户端上的 Web 浏览器使用 TCP 通过网络建立连接(几乎总是在称为 IP 的协议之上,因为您正在使用互联网)。最重要的是,客户端在 HTTP 中“说出”消息。所有这些不同的层都在“7 层 osi 网络模型”中进行了描述。

在很多层面上都有大量的细节。希望这能让你开始。

另请参阅http://www.quora.com/What-happens-when-you-type-a-URL-into-your-browser

于 2012-05-11T03:06:26.340 回答
2

最简单的方法是让一些代码使用 POP3 或 IMAP 连接到目标地址的邮箱,并等待新的传入消息。

发送电子邮件时,您可以添加Message-ID标题。当用户回复电子邮件时,会有一个References应该有用户正在回复的 Message-ID。

您何时可以使用此 ID 来关联他们的响应内容。

为安全起见,您可能希望将 ID 嵌入消息本身(因为今天大多数人不编辑回复),因此如果由于某种原因未提供 Reference 标头,您可以查看消息的正文。还有其他技术可以让您为每封邮件提供一个客户回复地址,这是可以做到的另一种方式,但这需要一些邮件服务器的支持。

但是,无论如何,一旦您弄清楚了消息结构,您只需收听地址的收件箱,然后查找新消息。当它们到达时,您会剥离消息 ID,并在数据库中将它们标记为适当的,或其他任何东西。

至于“等待”消息,您必须意识到这可能是一个漫长的等待。与其让 POJO 等待它,不如用一个简单的过程来 ping 状态。您可以有一个每秒触发一次的计时器,然后检查数据库以查看它是否已更新等。显然,这是您希望能够取消的。

对于所有的邮件需求,您可以使用 JavaMail——它可以完成所有这些,而且使用起来非常简单。

于 2012-05-11T03:32:02.000 回答