Java:如何检查用户是否点击或回复了电子邮件(作为电子邮件身份验证方案的一部分)



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

我想到的 Java 中间层的步骤是:

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

我可以写除步骤 4 之外的所有内容。从本质上讲,我需要一种方法来向用户发送电子邮件,然后接收某种类型的响应,指示用户已收到电子邮件。

有人知道如何做到这一点吗?如果没有,您推荐的下一个最佳/最简单的解决方案是什么?

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

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

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

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

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

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

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

对于所有的邮件需求,你可以使用JavaMail——它做到了这一切,而且使用起来非常简单。

涉及

两个控制器(两个POJO(。

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

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

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

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

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

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

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

相关内容

最新更新