誰もが検証コードに精通していると思います。場合によってはアカウントを申請するかログインするかにかかわらず、検証コードを入力する必要があります。統計の後、検証コードを1つの検証で正常に渡す確率は90%であり、これは高くありません。非常に多くの人々は、ユーザーエクスペリエンスを減らすこのデザインの必要性を間違いなく疑いますが、ヘーゲルは次のように述べています。現実的なものはすべて合理的です。次に、検証コードについて学びましょう。
検証コードは、ユーザーがコンピューターであるか個人であるかを区別する公開完全自動プログラムです。これは、悪意のあるパスワードの割れ、チケットのスワイプ、フォーラムの洪水を防ぎ、ハッカーがブルートフォースの亀裂を介して絶えずログインするのを防ぐために使用されます。銀行、コミュニティ、フォーラム、投票システムなどで使用されています。
これ以上苦労せずに、Javaに検証コードを実装するために私が知っている4つの方法を見てみましょう。
方法1:
最初の方法は私が最初に考えたものであり、それは最も単純な実装ロジックでしたが、それは非常に効率的で安全でした。
特定の操作は次のとおりです。1。Photoshopを使用して、検証コード画像を作成します。長方形の写真には、必要な英語の手紙、数字、または中国語が含まれている場合があります(上記のように)
2。スイングコントロールまたはJSPページに画像を表示します
3.コード内の各画像の対応する検証コード文字列を一致させる
4.送信するときは、コンポーネントまたはテキストボックスに文字列と各画像の文字列を取得して、equals()メソッドと比較します。
欠点は、検証コード写真を作成するプロセスが時間がかかりすぎており、実装方法が非常に低いことです。このように実装することを強くお勧めします。次の方法は、より効率的で、美しく、比較的安全になります。
方法2:
ここでは、Java Webとサーブレットの下での検証コードの実装について説明しますが、ロジックはまだ非常に明確です。
よりシンプルな実装コードを削除するには、フロントエンドキーコードから始めましょう。
「はっきりと表示できない」をクリックすると、検証コードの画像が更新され、JS関数が呼び出されて画像パスをリセットして画像を置き換えます。以下のコードをご覧ください。コードでは、<%= request.getContextPath()%>は、相対パスの問題を解決し、サイトのルートパスを返すことができます。 /サーブレット/Imageservletは全体であり、Imageservletのサーブレットを指しています。なぜ前にA /サーブレットを追加する必要があるのですか? web.xmlで構成マッピングを作成したため、長い名前を変更すると理解できます。次に、次のJS関数を見てください。質問がある人もいるかもしれませんが、なぜ現在の時間を取得してパスの終わりに追加するのですか?実際、これはブラウザキャッシュの問題を解決するためです。 Imageservletがトリガーされた後に検証コード画像が変更されたことは問題ですが、キャッシュは変更されていません。一瞬ごとに異なる時間の助けを借りて、ブラウザキャッシュを無効にすることができます。
<script type = "text/javascript"> function reloadcode(){var time = new date()。getTime(); document.getElementById( "ImageCode")。src = "<%= request.getContextPath()%>/servlet/imageservlet?d ="+time; } </script>Web.xmlの重要な構成情報は次のとおりです。
<script type = "text/javascript"> function reloadcode(){var time = new date()。getTime(); document.getElementById( "ImageCode")。src = "<%= request.getContextPath()%>/servlet/imageservlet?d ="+time; } </script>次に、キーイメージサーブレットが画像を生成する方法を見てみましょう。
<Servlet> <Servlet-Name> Imageservlet </servlet-name> <servlet-class> com.muke.imageservlet </servlet-class> </servlet> <servlet-name> login-servlet </servlet-name> <servlet-class> com.muke.loginervlet </servlet-> <servlet mapping> <Servlet-Name> Imageservlet </servlet-name> <url-pattern>/sermagevlet </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> loginservlet </servlet-name> <url-pattern>/servlet/loginervlet </url-perthern> </vervetmapping>
この検証コードがどのように実装されているかをより鮮明に説明したい場合は、「描画」という単語のみが最初の方法に似ていますが、まだ比較的低くなりますが、コードを使用して検証コードを自動的に「描画」する効率は、間違いなく数え切れないほど増加しました。上記のコードを見てみましょう。まず、BufferedImageオブジェクトBIがインスタンス化されます。 BIは、検証コード画像を描画するために使用されます。次に、BIを使用してブラシGを取得し、Gを使用してエンティティの長方形の背景を描画します。次に、単純なロジックを使用して、Javaで一般的に使用されるDrawString()メソッドを呼び出して、長方形に検証コード文字を描画します。同時に、文字列はStringBuffer変数文字列オブジェクトに順番に追加され、検証コードを送信した後、比較のためにJSPビルトインオブジェクトセッションに最終的に保存されます。検証コードを表示するには、特定の画像形式で生成された検証コードイメージをImageIOストリームに記述する必要もあります。
以下のLoginServletからわかるように、Imageservletに保存されたところにある文字列を取得することにより、検証コード送信ボックスの文字列を比較できます。文字列を小文字または大文字に変更して、大文字を無視できます。
public class Imageservletは、httpservlet {public void doget(httpservletrequest request、httpservletresponse応答)を拡張します。グラフィックg = bi.getgraphics(); Color C = new Color(,,); G.SetColor(C); g.fillrect(、、); char [] ch = "abcdefghijklmnopqrstuvwxyz" .tochararray();ランダムr = new Random(); int len = ch.length、index; stringbuffer sb = new StringBuffer(); for(int i =; i <; i ++){index = r.nextint(len); g.setColor(new Color(r.nextint()、r.nextint()、r.nextint()、r.nextint())); g.drawstring(ch [index]+""、(i*)+、); sb.append(ch [index]); } request.getSession()。setAttribute( "piccode"、sb.toString()); Imageio.write(bi、 "jpg"、Response.getOutputStream()); }}実装の凡例は次のとおりです。
上記は、編集者が紹介したJava検証コードの生成に関する関連する知識です。それがあなたに役立つことを願っています! Java検証コードの生成を紹介します(パート2)。興味のある友達、wulin.comのウェブサイトに注意してください!