Peralatan:
Paket com.lhy.web.servlet; import java.awt.basicstroke; import java.awt.color; import java.awt.font; java.awt.graphics2d; import java.awt.image.bufferedimage; impor java.io.filenoteoncputeon; java.io.ioException; impor java.io.outputStream; impor java.util.random; import javax.imageio.imageio; kelas publik verifikasi kode {private int w = 70; // gambar private int h = 35; // gambar picture random r = new baru (); // Panjang gambar private int h = 35;//gambar picture private r acak r = new baru ();//Panjang gambar inter h = 35;//gambar gambar private r acak r = new baru ();//picture length gen generasi acak h = 35;/picture wide private r acak r = new new ();//picture length gener randum h = 35; picture//{"Song font", "Chinese Kai Technique", "Bold font", "Chinese New Wei", "Chinese Lishu", "Microsoft Elegant Black", "Kai Technique_GB2312"} private String[] fontNames = {"Song font", "Chinese Kai Technique", "Bold font", "Microsoft Elegant Black", "Kai Teknik_gb2312 "}; // Kode Verifikasi Karakter Opsional Kode String Pribadi = "23456789ABCDEFGHJKMNOPQRSTUVWXYZABCDEFGHJKMNPQRSUVWXYZ"; // Latar Belakang Warna Pribadi BGColor = Warna Baru (255, 255, 255); // teks pada kode verifikasi teks string pribadi; // Hasilkan warna acak Private Color RandomColor () {int red = r.nextInt (150); int green = r.nextint (150); int blue = r.nextint (150); mengembalikan warna baru (merah, hijau, biru); } // menghasilkan font acak font font acakfont () {int index = r.nextInt (fontnames.length); String fontName = fontNames [index]; // menghasilkan nama font acak int style = r.nextInt (4); // menghasilkan gaya acak, 0 (tidak ada gaya), 1 (bold), 2 (huruf miring), 3 (bold + italics) int ukuran = r.nextint (5) + 24; // menghasilkan ukuran font acak, 24 ~ 28 mengembalikan font baru (fontname, gaya, ukuran); } // Gambar garis interferensi private void drawline (gambar buferedImage) {int num = 3; // gambar 3 grafik2d g2 = (grafik2d) image.getGraphics (); untuk (int i = 0; i <num; i ++) {// Buat koordinat dua poin, yaitu, 4 nilai int x1 = r.nextInt (w); int y1 = r.nextint (h); int x2 = r.nextint (w); int y2 = r.nextint (h); G2.SetStroke (BasicStroke baru (1.5F)); g2.setColor (color.blue); // Garis interferensi adalah biru G2.Drawline (x1, y1, x2, y2); // gambar garis}} // secara acak menghasilkan karakter private char randomChar () {int index = r.nextInt (codes.length ()); return codes.charat (index); } // Buat bufferedImage private bufferedImage createImage () {// Lebar, tinggi, tipe gambar gambar bufferedImage = new BufferedImage (w, h, bufferedimage.type_int_rgb); Graphics2d g2 = (graphics2d) image.getGraphics (); g2.setColor (this.bgcolor); g2.fillrect (0, 0, w, h); gambar kembali; } // kembalikan teks pada gambar kode verifikasi string publik getText () {return text; } // Simpan gambar ke output output yang ditentukan public static void output (BufferedImage Image, OutputStream out) melempar ioException {imageo.write (gambar, "jpeg", out); } // Panggil metode ini untuk mendapatkan kode verifikasi public bufferedImage getImage () {bufferedImage Image = createImage (); // Buat gambar buffer graphics2d g2 = (graphics2d gambar. 4; // tambahkan huruf ke float sb x = i * 1.0f * w /4; // Atur koordinat sumbu x dari karakter saat ini g2.setFont (randomfont ()); // atur random font g2.setColor (randomColor ()); // atur warna acak g2.drawstring (s, x, h-5); // gambar gambar} this.text = sb.toString (); // Tetapkan string yang dihasilkan ke drawline ini.text (gambar); // Tambahkan gambar pengembalian baris interferensi; } public static void main (string [] args) melempar filenotfoundException, ioException {verifyCode vc = new verifyCode (); // Buat objek dari kelas verifyCode BufferedImage bi = vc.getimage (); Metode call getImage () untuk mendapatkan objek BufferedMage. 3.jpg ")); // Panggil metode output metode statis () untuk menyimpan gambar dalam sistem aliran output file.out.println (vc.gettext ()); // cetak nilai teks kode verifikasi pada konsol}}VerifikasiCodeserVlet:
Paket com.lhy.web.servlet; import java.awt.image.bufferedimage; impor java.io.ioException; impor javax.servlet.servletException; impor javax.servlet.http.htpservlet; impor javax.servlet.http.htpservlet; impor javax.servlet.http.htpservlet; javax.servlet.http.httpservletResponse; kelas publik VerifyCodeserVlet memperluas httpservlet {public void doGet (httpservletequest permintaan, httpservePesponse* Genere* Lapangan Sesi 2. VerifikasiCode vc = new verifyCode (); Gambar buferedImage = vc.getImage (); request.getSession (). setAttribute ("session_vcode", vc.getText ()); // simpan teks pada gambar ke dalam bidang sesi verifikasiCode.output (gambar, respons.getoutputStream ()); }}LOGINSERVLET:
Paket com.lhy.web.servlet; import java.io.ioException; import javax.servlet.requestdispatcher; import javax.servlet.servletException; import javax.servlet.http.cookie; impor javax.servlet.http.htpsve.cookie; import javax.servlet.htp.htpsve; javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; public logipspspspspspsponse; cdas public; DOPOST (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException { /** kode verifikasi verifikasi* 1. Dapatkan kode verifikasi yang benar dari sesi* 2. Dapatkan kode verifikasi diisi oleh pengguna dari formulir* 3. Buat perbandingan! * 4. Jika hal yang sama benar, jalankan ke bawah, jika tidak simpan pesan kesalahan ke domain permintaan dan lanjutkan ke login.jsp */ string sessionCode = (string) request.getSession (). GetAttribute ("session_vcode"); String paramCode = request.getParameter ("VerifyCode"); if (! ParamCode.equalSignorecase (sessionCode)) {request.setAttribute ("msg", "kesalahan kode verifikasi!"); request.getRequestDispatcher ("/login.jsp"). Maju (permintaan, respons); kembali; } /** 1. Dapatkan data formulir* / // menangani permintaan pertanyaan Cina.setcharacterencoding ("UTF-8"); // Dapatkan string username = request.getParameter ("nama pengguna"); String password = request.getParameter ("password"); /** 2. Verifikasi apakah nama pengguna dan kata sandi benar*/if ("iTcast" .equalSignorecase (nama pengguna)) {// Login berhasil/** item tambahan: Simpan nama pengguna ke cookie dan kirimkan ke klien? Cookie ("uname", nama pengguna); // Buat cookie cookie.setmaxage (60* 60* 24); // Atur kehidupan cookie ke respons 1 hari. session.setAttribute ("nama pengguna", nama pengguna); // simpan nama pengguna ke respons domain sesi. } else {// login gagal/** 4. Jika gagal*> simpan pesan kesalahan untuk meminta domain*> maju ke login.jsp*/request.setAttribute ("msg", "kesalahan dalam nama pengguna atau kata sandi!"); RequestDispatcher qr = request.getRequestDispatcher ("/login.jsp"); // Dapatkan Forwarder qr.forward (request, response); // Forward}}}Login.jsp:
<%@ page language = "java" import = "java.util.*" pageEncoding = "UTF-8"%> <%string path = request.getContextPath (); string basepath = request.getscheme ()+": //"+request.getServername ()+":"+request.getserverport ()+PATPERPORT.POCPY ";"; "+": "+"+"+"; "+"; "+"; "+"; "+"; "+"; "+"; "publporpy ();"+";"+";"+";" publport ";"); "+"; "+"; docty/doctypath (): "+request. "-// w3c // dtd html 4.01 transisi // en"> <html> <head> <base href = "<%= basepath%>" rel = "nofollow eksternal"> <title> login. http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "kedaluwarsa" konten = "0"> <meta http-equiv = "kata kunci" konten = "kata kunci1, kata kunci2, koki"> <meta http http-equiv = "koki" ini = "ini" type = "text/css" href = "styles.css" rel = "eksternal nofollow"> -> <script type = "text/javascript"> function _change () {/ * 1. Dapatkan elemen IMG 2. Ubah SRC */var imgele = document.getElementByid ("IMG"); imgele.src = "<%= Basepath%> servlet/verifyCodeserVlet? a =" + tanggal baru (). getTime ();} </script> </head> <body> <%-halaman ini menyediakan formulir login, dan juga menampilkan pesan kesalahan-%> <h1> Login </h1> <%/*Baca cookie bernama The Cookie Disebut The Cookie Disebut The Cookie Disobel The Cookie Disobatkan The Cookie Disobatkan The Cookie Name! Jika kosong, ditampilkan: "" Jika tidak kosong, itu ditampilkan: Nilai cookie */string uname = ""; cookie [] cs = request.getCookies (); // Dapatkan semua cookie dalam permintaan (cs! = Null) {// jika ada cookie untuk (cookie c: cs) {/cookne) (cooke "(cookie" (cookie cooke cs: cs) {/cooke) melalui cooke (cookie ". {// Cari cookie bernama uname uname = c.getValue (); // Dapatkan nilai cookie ini dan berikan variabel uname}}}%> <% string message = ""; String msg = (string) request.getAttribute ("msg"); // Dapatkan atribut bernama msg di bidang permintaan if (msg! = Null) {message = msg; }%><font color="red"><b><%=message %> </b></font><form action="servlet/LoginServlet" method="post"> <%-- Show the user name in the cookie to the user name text box--%> Username: <input type="text" name="username" value="<%=uname%>"/><br/> Password: <input type="password" Name = "Kata Sandi"/> <br/> Kode Verifikasi: <Input Type = "Text" Name = "VerifyCode" size = "3"/> <img id = "img" src = "<%= Basepath%> servlet/verifyCodeserVlet"/> <a href = "Javascript: _change ()" Rel = "/Rel =" <a href = "Javascript: _change ()" Rel = "ExcoPy" Excogn "Excogn" Excogn "Excogn" ExcoP over "Excogn" type = "Kirim" value = "Login"/> </form> </body> </html>Loginsuccess:
<hody> <h1> succ1 </h1> <%string username = (string) session.getAttribute ("username"); if (username == null) {/ * 1. Simpan pesan kesalahan ke domain permintaan dan meneruskannya ke login.jsp */request.setAttribute ("msg", "Anda belum dikumpulkan! request.getRequestDispatcher ("/login.jsp"). Maju (permintaan, respons); return;}%> Selamat datang, selamat datang, selamat datang <%=username %> pemimpin untuk memandu pekerjaan!
</body> </html>
File Konfigurasi:
<servlet> <servlet-name> LogInservlet </servlet-name> <servlet-class> com.lhy.web.servlet.loginservlet </servlet-class> </servlet> <servlet-Mapping> <servlet> <servlet> LoginServlet </servlet-name> <rig-pattern>/servlet> LoginServlet </servlet-name> <rig-Pattern>/servlet> LOGINServlet </servlet-name> <rumlaterer> <servlet-name> verifyCodeserVlet </servlet-name> <servlet-class> com.lhy.web.servlet.verifyCodeserVlet </servlet-class> </servlet> <servlet-Mapping> <servlet-name> verifyCodeservlet </servlet-name> <riglet-pattern>/servlet>
Saran: Yang terbaik adalah mengatur servlet yang menghasilkan kode verifikasi tanpa cache, sehingga Anda tidak perlu menambahkan cap waktu ketika halaman meminta gambar kode verifikasi. Menambahkan cap waktu adalah menipu browser untuk mencegah browser membaca gambar kode verifikasi di cache, dan tidak ada respons setelah mengklik untuk mengubahnya. Ini bukan hal yang baik. Setiap kali saya mengklik untuk mengubah gambar lain, browser akan menyimpan gambar yang baru diperoleh secara lokal. Jika tidak di -cache di servlet, itu tidak akan menemui mereka secara lokal.
Meringkaskan
Di atas adalah contoh kode alat kode verifikasi Java yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!