Artikel ini akan sepenuhnya dijelaskan dari halaman meja depan ke meja belakang. Mari kita lihat di bawah ini.
1. Kode latar depan, gambar.jsp
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" Konten-Type "Content =" Teks/html; charset = UTF-8 "> <title> dapatkan kode verifikasi gambar </title> <" src = "$ {pageContext.Request.contextPath} /static/js/jquery-1.10.2.min.js"> </script> </head> <body> <bentuk action = "##" Method = 'POST'> <input = "hidden" id = "userid" name = "name =" "" "" "" inpum = "input> <input> <" inpum = "input> <" inpum = "ID =" nameD "name =" "name =" "name =" "name =" "nameD" name = "" nameD "name =" "nameAD =" " name = 'LoginName' id = "LoginName" placeholder = "nama pengguna" value = "" class = 'Form-control'/> </div> </div> <v div> <input type = "kata sandi" autocomplete = "off" ID = "pwd" name = "pwd" placeholder = "kata sandi" class = 'form-control "name =" pwd "placeholder =" kata sandi "class =' Form-control" name = "pwd" </pwd "Placeholder =" kata sandi "class = 'Form-control" name = "pwd" ID = "ValidAtecode" OnBlur = "CheckImg (This.Value)" Name = "ValidAtecode" type = "Text" Placeholder = "Masukkan kode verifikasi"/> </Div> <span> <img id = "codevalidateImg" onclick = "javascript: flushValidateCode ();" href = "JavaScript: flushvalidatecode ();" >Change one</a></p> </div> <div> <span></span> </div> <div> <div> <input type="checkbox" name="remember" value="1" class='icheck-me' data-skin="square" data-color="blue" id="remember"> <label for="remember"> Remember me</label> </div> <input type="button" value="Login" OnClick = "JavaScript: SubMitForm ();" class = 'btn btn-primary'> </div> </form> <script type = "text/javaScript"> $ (dokumen) .ready (function () {flushvalidateCode (); // refresh dan hasilkan kode verifikasi});/* refresh dan hasilkan kode verifikasi*/fungsi fleShalidaCode {) () () () () {varifikasi verifikasi {) {varification code flushvalidaDode {) {) {) {) {) {) verifikasi {) {) {) {) verifikasi {) {) {) {) {) {) {); document.getElementById("codeValidateImg");validateImgObject.src = "${pageContext.request.contextPath }/getSysManageLoginCode?time=" + new Date();}/* Verify that the verification code is entered correctly*/function checkImg(code){ var url = "$ {pagecontext.Request.contextPath}/checkImageCode"; $ .get (url, {"validateCode": code}, function (data) {if (data == "ok") {alert ("OK!")} else {waspada ("error!") flushvalidateCode ();}})} </ptript> </body> </html>2. Kode Latar Belakang ImageGencontroller.java
Paket com.dufyun.springmvc.web.controller; import javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; impor javax.servlet.http.httpservletRespons; org.springframework.util.stringutils; impor org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.responseBody; commercricliclicliclicliclicliclicliclicliclicer@clascuBer.javaWeb.test.RandOnderer; @RequestMapping (value = "/toimg") Public String toImg () {return "Image/Image"; } // Masuk untuk mendapatkan kode verifikasi @RequestMapping ("/getsysmanagelogincode") @ResponseBody Public String getsysmanagelogincode (httpservletResponse response, httpservletrequest request) {response.setContentType ("gambar/jpeg");///koording {response.setContentType ("Image/JPEG");// response.setHeader ("pragma", "no-cache"); // Tetapkan informasi header respons untuk memberi tahu browser untuk tidak cache respons konten ini.setHeader ("cache-control", "no-cache"); response.setHeader ("set-cookie", "name = value; httponly"); // Setel properti httponly untuk mencegah serangan XS response.setDateheader ("kedaluwarsa", 0); Acakvalidatecode acakvalidatecode = new randomValidateCode (); coba {randomValidateCode.getRandCode (permintaan, respons, "imagecode"); // output Metode gambar} catch (pengecualian e) {e.printstacktrace (); } kembali ""; } // kode verifikasi verifikasi @requestMapping (value = "/checkImageCode") @ResponseBody Public String checkTcode (permintaan httpservletRequest, respons httpservletResponse) {string validateCode = request.getParameter ("validateCode"); Kode string = null; // 1: Dapatkan informasi kode verifikasi di cookie cookie [] cookies = request.getCookies (); untuk (cookie cookie: cookies) {if ("imagecode" .equals (cookie.getName ())) {code = cookie.getValue (); merusak; }} // 1: Dapatkan informasi kode verifikasi sesi // string code1 = (string) request.getSession (). GetAttribute (""); // 2: Tentukan apakah kode verifikasi benar jika (! Stringutils.isempty (validateCode) && validateCode.equals (kode)) {return "ok"; } return "error"; // Saya tidak melakukan verifikasi pemrosesan fuzzy ukuran huruf di sini. Jika Anda tertarik, Anda dapat mencobanya! }}3. RandomValidateCode.java Kelas Alat Untuk Menghasilkan Kode Verifikasi
Paket com.dufy.javaweb.test; impor java.awt.color; impor java.awt.font; impor java.awt.graphics; java.awt.image.bufferedimage; import java.bytearrayoutputstream; impor java.randomil.randomiloio; javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; kelas publik acak validatecode {private acak = acak baru (); Private String randString = "0123456789AbcDefgHiJKlMnopQrStuVWxyz"; // Lebar intr Private int private secara acak = 80; // Lebar gambar intr Private Int Tinggi = 26; // Picture Height Int Private int Lineze = 40; // Jumlah baris interferensi interkorin int stringnum = 4; // acak -acak = 40; // Jumlah interferensi baris interferensi int stringnum = 4; // acak -acak Font ("fixedsys", font.center_baseline, 18); } /** Dapatkan warna* / warna pribadi getRandColor (int fc, int bc) {if (fc> 255) fc = 255; if (bc> 255) bc = 255; int r = fc + random.nextInt (bc - fc - 16); int g = fc + random.nextInt (bc - fc - 14); int b = fc + random.nextInt (bc - fc - 18); mengembalikan warna baru (r, g, b); } /** Draw String* / Private String DrawString (Grafik G, String RandomString, int i) {g.setFont (getFont ()); g.setColor (warna baru (acak.nextint (101), random.nextint (111), acak .nextint (121))); String rand = string.ValueOf (getRandomString (random.nextInt (randString.length ()))); acak += rand; g.translate (acak.nextint (3), random.nextint (3)); G.DrawString (Rand, 13 * i, 16); mengembalikan acak; } /** Gambar garis interferensi* / private void drawline (grafik g) {int x = random.nextInt (lebar); int y = random.nextInt (tinggi); int xl = random.nextInt (13); int yl = random.nextInt (15); G.Drawline (x, y, x + xl, y + yl); } /** Dapatkan karakter acak* / string publik getRandomString (int num) {return string.valueof (randString.charat (num)); } / *** Menghasilkan gambar acak* / public void getRandCode (permintaan httpservletrequest, respons httpservletResponse, tombol string) {// kelas bufferedImage adalah kelas gambar dengan buffer, dan kelas gambar adalah kelas yang digunakan untuk menggambarkan informasi buffered. Grafik g = image.getGraphics (); // Hasilkan objek grafis objek gambar. Anda dapat melakukan berbagai operasi menggambar pada gambar dengan memodifikasi objek G.Fillrect (0, 0, lebar, tinggi); g.setfont (font baru ("Times New Roman", font.roman_baseline, 18)); G.SetColor (GetRandColor (110, 133)); // Gambarlah garis interferensi untuk (int i = 0; i <= linize; i ++) {drawline (g); } // Gambarkan string karakter acak randomstring = ""; untuk (int i = 1; i <= stringnum; i ++) {randomstring = drawstring (g, randomstring, i); } // 1: Masukkan kode verifikasi yang dihasilkan secara acak ke dalam cookie cookie cookie = cookie baru (kunci, acak); response.addcookie (cookie); // 2: Masukkan kode verifikasi yang dihasilkan secara acak ke dalam sesi sesi sessionid = request.getSession (). GetId (); request.getSession (). SetAttribute (sessionID+key, acak); System.out.println ("************" + acak); // Ringkasan: Kedua metode itu bagus, // (1): Gunakan cookie untuk mengirim kode verifikasi ke browser depan, yang tidak aman! Tidak disarankan untuk digunakan. // (2): Menggunakan metode sesi dapat menyelesaikan masalah bahwa kode verifikasi tidak dikirim ke browser, yang lebih aman, tetapi jika jumlah pengguna terlalu besar, metode penyimpanan tersebut akan memberi tekanan pada server dan mempengaruhi kinerja server. Tidak disarankan untuk digunakan. // Metode ini diterapkan sementara di sini. Cara terbaik adalah dengan menyimpan kode verifikasi yang dihasilkan dalam cache yang digunakan dalam proyek dan mengatur waktu pembatalan, yang tidak hanya dapat mencapai keamanan tetapi juga mengurangi tekanan pada server. g.dispose (); coba {bytearrayoutputStream tmp = new ByTeArrayOutputStream (); Imageo.write (Image, "Png", TMP); tmp.close (); Integer ContentLength = tmp.size (); response.setHeader ("panjang konten", contentLength + ""); response.getOutputStream (). write (tmp.tobytearray ()); // output gambar dalam memori ke klien dalam aliran} catch (pengecualian e) {e.printstacktrace (); } akhirnya {coba {response.getoutputStream (). flush (); response.getoutputStream (). tutup (); } catch (Exception e2) {e2.printstacktrace (); }}}} 4. Ringkasan
Isi artikel ini berakhir di sini. Jika Anda tidak memahami konten di dalamnya, Anda dapat meninggalkan pesan untuk didiskusikan. Saya berharap konten artikel ini akan membantu untuk belajar dan bekerja semua orang.