Javaは検証コード検証機能をどのように実装しますか?日常生活では、検証コードはどこでも見ることができ、アカウントのセキュリティをある程度保護することができます。それで、彼はどのようにそれを達成しましたか?
Javaは検証コード検証機能を実装します。実際には非常に単純です。グラフィックスクラスは、アートボードに文字を描画し、特定の数の文字をランダムに選択してランダムに生成し、アートボードでいくつかの干渉線をランダムに生成します。
まず、ランダムな文字を描画するために使用されるヘルプクラスを生成するために確認コードを書きます。
java.awt.colorをインポートします。 java.awt.fontをインポートします。 java.awt.graphicsをインポートします。 java.awt.image.bufferedimageをインポートします。 java.io.ioexceptionをインポートします。 java.io.outputStreamをインポートします。 java.util.randomをインポートします。 javax.imageio.imageioをインポートします。パブリッククラスGraphichElper { / ** *生成された検証コードを文字列の形式で返し、画像を同時に出力します * * @param width *画像の幅 * @param heigh * @param imgtype * @param imgtype *画像タイプ * @param出力 *画像出力ストリーム(このストリームの出力) int width、final int height、final string imgtype、outputstream output){stringbuffer sb = new StringBuffer(); RANDOM RANDOM = new Random(); bufferedimage image = new BufferedImage(幅、高さ、bufferedimage.type_int_rgb);グラフィックグラフィック= image.getGraphics(); Graphic.setColor(color.getColor( "f8f8f8")); Graphic.FillRect(0、0、幅、高さ); color [] colors = new color [] {color.blue、color.gray、color.green、color.red、color.black、color.orange、color.cyan}; //(int i = 0; i <50; i ++){graphic.setcolor(colors [random.nextint(colors.length)])の(int i = 0; i <50; i ++)の「artboard」(50は行数)に干渉線を生成します。 final int x = random.nextint(width); final int y = random.nextint(height); final int w = random.nextint(20); final int h = random.nextint(20); final int signa = random.nextboolean()? 1:-1; final int signb = random.nextboolean()? 1:-1; graphic.drawline(x、y、x + w * signa、y + h * signb); } //「アートボード」Graphic.setFont(new Font( "comic sans ms"、font.bold、30))に文字を描画します。 for(int i = 0; i <6; i ++){final int temp = random.nextint(26)+97; string s = string.valueof((char)temp); sb.append(s); Graphic.setColor(colors [random.nextint(colors.length)]); Graphic.DrawString(s、i *(width / 6)、height-(height / 3)); } graphic.dispose(); try {imageio.write(image、imgtype、output); } catch(ioexception e){e.printstacktrace(); } return sb.toString(); }}次に、画像サイズを修正するサーブレットを作成し、検証コードの使用シナリオを処理し、ページで生成された検証コードをキャプチャします(キャプチャされたQRコードは、渡す前にユーザーが入力した検証コードと一致します)。
java.io.ioexceptionをインポートします。 java.io.outputStreamをインポートします。 javax.servlet.servletexceptionをインポートします。 javax.servlet.annotation.webservletをインポートします。 javax.servlet.http.httpservletをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 javax.servlet.http.httpsessionをインポートします。 @webservlet(urlpatterns = "/verify/regist.do")public class verifycodeservletはhttpservlet {private static final long serialversionuid = 3398560501558431737l; @Override Protected void Service(httpservletrequest request、httpservletResponse Response)servletexception、ioexception {//現在のリクエストに対応するセッションオブジェクトを取得しますhttpsession session = request.getsession(); //リクエスト(均一なリソース識別子)string uri = request.getRequesturi()からURIを取得します。 System.out.println( "hello:" + uri); final int width = 180; //画像幅final int height = 40; //画像の高さ最終文字列imgtype = "jpeg"; //画像形式(MIMEタイプを参照していない)最終出力ストリーム出力= Response.GetOutputStream()を指定します。 //画像をクライアントに返すことができる出力ストリームを取得しますSystem.out.println( "検証コードコンテンツ:" +コード); // URIと対応する検証コード(現在のセッションオブジェクトの属性に保存されている)の間に関連性を作成します。SESTATTRIBUTE(URI、Code); System.out.println(session.getAttribute(uri)); }}次に、HTML登録ページを作成して確認します。
<!Doctype HTML> <HTML> <ヘッド> <メタcharSet = "utf-8"> <title> register> <link rel = "styleSheet" href = "styles/general.css"> <link rel = "styleSheet" href = "styles/cell.cs type = "text/javascript" src = "js/ref.js"> </script> <style type = "text/css"> .logo-container {margin-top:50px; } .logo-container img {width:100px; } .message-container {height:80px; } .link-container {height:40px; Line-Height:40px; } .link-container a {text-decoration:none; } </style> </head> <body> <div> <form action = "/wendao/regist.do" method = "post"> <div> <! - 登録フォームStart-> <div> <span> <i> </i> </span> <span style = "text-align:left;"> <input = "text" <div> <span> <i> </i> </span> <span> <i> </i> </span> <span> <i> </i> </span> <span> <i> </i> </i> </span> <span> </i> </span> <span> <inputタイプ= "パスワード" name = "確認" Placeholder = type = "password" name = "praceholder =" praceholder "> </span> </div> <div> <span> <input type =" text "name =" verifycode "placeholder =" span> <span = "text-align:center;"> <img src = "/demo/demoify/regify/regist.do" </span> </div> <div style = "border:none;"> <span style = "text-align:" left "> <input type =" reset "value =" reset "> </span> <span style =" text-align:right; "> <inputタイプ=" "value =" register "> </span> </div> </html>効果は次のとおりです。
[ページをクリックして更新すると、確認コードも変更されますが、検証コードがはっきりと表示されない場合は、検証コードをクリックする限り更新します。このようにして、JavaScriptを使用してローカルリフレッシュを実現できます。
in <img src = "/demo/verify/regist.do">に、疑問符と接尾辞番号を追加します。更新されたら、接尾辞番号を変更し続け、形成された検証コードも変更され続けます。使用できる方法の1つは、接尾辞番号を日付に置き換えることです。日付は現地時間を取得し、時間はいつでも変わります。これにより、更新検証コードがいつでも変更されることが保証されます。
コードは次のとおりです。
function myrefersh(e){const source = e.src; //元のsrc //console.log( "source:" + source)でコンテンツを取得します。 var index = source.indexof( "?"); //最初の外観の場所を見つけます(存在しない場合は-1を返します)//console.log( "index:" + index); if(index> -1){//見つかった場合?、内部var s = source.substring(0、index); //ソース(インデックスとインデックス後のコンテンツが破棄される)からインデックスの前にコンテンツをインターセプトする//console.log( "s:" + s); var date = new Date(); //日付オブジェクトのインスタンスを作成しますvar time = date.getTime(); //この時間に対応するミリ秒値を取得します。日付オブジェクトの新しく作成されたインスタンスe.src = s + "?time =" + time; // src //console.log(e.src)のテールアドレスを交換します。 } else {var date = new date(); E.SRC = source + "?time =" + date.getTime(); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。