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

関連する 2 つのコントローラー (2 つの POJO) があります。

ステップ 1、2、3 の最初の接続は、サーバー内の 1 つのオブジェクトと通信します。(2) の一部として、一意のコード (コメントに記載されている UUID) が生成され、データベースに保存されます

2 番目の接続では、ユーザーがリンクをクリックすると、別のコントローラー (別の POJO。実装に応じて、同じクラスまたは別のクラスになる可能性があります) に移動します。リンクから UUID を読み取り、データベースに移動し、UUID に関連付けられた電子メールを見つけ、その電子メールを検証済みとしてマークします。

が欠けているのかわかりませんが、ユーザーが電子メールのリンクをクリックすると、オペレーティング システムが Web ブラウザーを開きます。Web ブラウザーがサーバーに接続します。サーバーは、URL に UUID を含む HTTP GET 要求を受信し、その UUID を POJO に渡します。

いくつかの用語: Web サーバーで着信要求を処理するプロセスは通常「ルーティング」と呼ばれ、呼び出されるコードを構造化するために使用される一般的なパターンは「MVC」です。正確な詳細は、使用しているアプリケーション フレームワークによって異なります。サーブレットベースの Java コードの場合、URL からサーブレットへのマッピングがあります (サーブレットは、特定のインターフェースを実装する Java コードです。フレームワークは、POJO と呼んでいるものを最終的に呼び出すサーブレットを提供する場合もあれば、自分でサーブレットを作成する場合もあります)。それはあなたのPOJOになりますが、その場合は特定のインターフェースを実装しているため、間違った名前です)。

また、クライアントの 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が返信しているメッセージ ID を持つ必要がある があります。

この ID を使用して、応答しているものを関連付けることができる場合。

安全のために、メッセージ自体に ID を埋め込むことをお勧めします (今日のほとんどの人は返信を編集しないため)。これにより、何らかの理由で Reference ヘッダーが提供されていない場合にメッセージの本文を確認できます。各メールに顧客の返信先アドレスを付与する方法は他にもあります。これも別の方法ですが、メール サーバーのサポートが必要です。

とにかく、メッセージの構造を理解したら、アドレスの受信箱を聞いて、新しいメッセージを探すだけです。それらが到着したら、メッセージ ID を取り除き、DB などで適切にフラグを立てます。

メッセージの「待機」に関しては、長い待ち時間になる可能性があることを理解する必要があります。POJO を待機させるのではなく、ステータスを ping する単純なプロセスを用意します。毎秒起動するタイマーを設定し、データベースが更新されているかどうかなどを確認できます。明らかに、これはキャンセルできるようにしたいものです。

すべてのメールのニーズに対して、JavaMail を使用できます。JavaMail はこれらすべてを実行し、非常に簡単に使用できます。

于 2012-05-11T03:32:02.000 に答える