أدوات:
package com.why.web.servlet ؛ import java.awt.basicsstroke ؛ import java.awt.color ؛ import java.awt java.io.ioException ؛ import java.io.outputstream ؛ import java.util.random ؛ import javax.imageio.imageio ؛ public class verifycode {private int w = 70 ؛ Font "،" Chinese Kai Technique "،" Bold Font "،" Chinese New Wei "،" Chinese Lishu "،" Microsoft Elegant Black "،" Kai Technique_GB2312 "} private [] fontnames = {" song font "،" الصينية Kai Technique "،" Bold Font "، // رمز التحقق من الأحرف الاختيارية رموز السلسلة الخاصة = "23456789ABCDEFGHJKMNOPQRSTUVWXYZABCDEFGHJKMNPQRSTUVWXYZ" ؛ // خلفية اللون اللون الخاص bgcolor = لون جديد (255 ، 255 ، 255) ؛ // نص على نص التحقق من نصوص السلسلة الخاصة ؛ // إنشاء لون عشوائي اللون العشوائي () {int red = r.nextint (150) ؛ int green = r.nextint (150) ؛ int Blue = R.NextInt (150) ؛ إرجاع لون جديد (أحمر ، أخضر ، أزرق) ؛ }. String fontname = fontnames [index] ؛ // إنشاء اسم خط عشوائي int style = r.nextint (4) ؛ // إنشاء نمط عشوائي ، 0 (لا نمط) ، 1 (Bold) ، 2 (مائل) ، 3 (Bold + Mithics) int size = R.Nextint (5) + 24 ؛ // إنشاء حجم الخط العشوائي ، 24 ~ 28 إرجاع خط جديد (fontname ، النمط ، الحجم) ؛ }. لـ (int i = 0 ؛ i <num ؛ i ++) {// إنشاء إحداثيات من نقطتين ، أي ، 4 قيم int x1 = r.nextint (w) ؛ int y1 = r.nextint (h) ؛ int x2 = r.nextint (w) ؛ int y2 = r.nextint (h) ؛ G2.SetStroke (BasicStroke الجديد (1.5F)) ؛ g2.setColor (color.blue) ؛ // خط التداخل هو الأزرق g2.drawline (x1 ، y1 ، x2 ، y2) ؛ // draw line}} // قم بإنشاء حرف char char char () {int index = r.nextint (codes.length.length ()) ؛ رموز الإرجاع. charat (الفهرس) ؛ }. Graphics2d G2 = (Graphics2d) Image.getGraphics () ؛ g2.setColor (this.bgColor) ؛ G2.fillRect (0 ، 0 ، W ، H) ؛ إرجاع الصورة ؛ } // إرجاع النص على صورة رمز التحقق public getText () {return text ؛ }. } // استدعاء هذه الطريقة للحصول على رمز التحقق من BufferedImage getImage () {bufferedImage Image = createImage () ؛ // إنشاء صورة مخزن مؤقت Graphics2d G2 = (Graphics2d) image.getGraphics () i <4 ؛ // أضف أحرفًا إلى sb float x = i * 1.0f * w /4 ؛ // قم بتعيين إحداثيات المحور السيني للشخصية الحالية G2.setFont (RandomFont ()) ؛ // اضبط الخط العشوائي G2.setColor (RandomColor ()) ؛ // قم بتعيين لون عشوائي G2.drawString (S ، X ، H-5) ؛ // ارسم صورة} this.text = sb.toString () ؛ // قم بتعيين السلسلة التي تم إنشاؤها إلى this.text drawline (Image) ؛ // إضافة صورة إرجاع خط التداخل ؛ ) 3.jpg ")) ؛ // استدعاء طريقة إخراج الطريقة الثابتة () لحفظ الصورة في System.out.println (VC.GetText ()) ؛VerifyCodeservlet:
package com.lhy.web.servlet ؛ import java.awt.image.bufferedImage ؛ import java.io.ioException ؛ import javax.servlet.servletexception ؛ import javax.servlet.http.httpservlet ؛ import javax.servlet.http.httplet javax.servlet.http.httpservletresponse ؛ الفئة العامة VerifyCodeservlet يمتد httpservlet {public void dogge (httpservletrequest vc = new VerifyCode () ؛ صورة bufferedImage = vC.GetImage () ؛ request.getSession (). setAttribute ("session_vcode" ، vc.getText ()) ؛ // احفظ النص على الصورة في حقل الجلسة VerifyCode.output (Image ، response.getOutputStream ()) ؛ }}loginservlet:
package com.why.web.servlet ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.requestdispatcher ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.cookie ؛ استيراد javax.servlet.http.http.httplet ؛ javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpletresplen DOPOST (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException { /** رمز التحقق من التحقق* 1. احصل على رمز التحقق الصحيح من الجلسة* 2. * 4. إذا كان الشيء نفسه صحيحًا ، فتشغيله ، وإلا احفظ رسالة الخطأ إلى مجال الطلب وإعادة توجيهها إلى login.jsp */ string sessioncode = (string) request.getSession (). getAttribute ("session_vcode") ؛ String paramcode = request.getParameter ("VerifyCode") ؛ if (! paramcode.equalsignorecase (sessionCode)) {request.setAttribute ("msg" ، "خطأ رمز التحقق!") ؛ request.getRequestDispatcher ("/login.jsp"). يعود؛ } /** // الحصول على username string = request.getParameter ("اسم المستخدم") ؛ سلسلة كلمة مرور = request.getParameter ("كلمة المرور") ؛ /** 2. تحقق مما إذا كان اسم المستخدم وكلمة المرور صحيحين*/if ("itcast" .equalsignorecase (اسم المستخدم)) {// تسجيل الدخول بنجاح/** عنصر إضافي: حفظ اسم المستخدم إلى ملف تعريف الارتباط وإرساله إلى Browser* عند فتح login.jsp مرة أخرى ، سيتم فتح ملف تعريف الارتباط في الطلب. ملف تعريف الارتباط ("uname" ، اسم المستخدم) ؛ // إنشاء ملف تعريف الارتباط cookie.setMaxage (60* 60* 24) ؛ // اضبط حياة ملف تعريف الارتباط على استجابة يوم واحد. Session.setAttribute ("اسم المستخدم" ، اسم المستخدم) ؛ // حفظ اسم المستخدم إلى مجال الجلسة Response.SendRedRect ("/test/succ1.jsp") ؛ } آخر {// فشل تسجيل الدخول/** 4. إذا فشل*> حفظ رسالة الخطأ لطلب المجال*> إعادة التوجيه إلى login.jsp*/request.setattribute ("msg" ، "خطأ في اسم المستخدم أو كلمة المرور!") ؛ requestDispatcher qr = request.getRequestDispatcher ("/login.jsp") ؛ // get forower 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.getserport () "-// w3c // dtd html 4.01 Transitional // en"> <html> <head> <base href = "<٪ = basepath ٪>" rel = "severonal nofollow"> <title> my jsp 'login.jsp' بدء تشغيل صفحة meta http-equiv = "pragma" http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "Expires" content = "0"> <meta http-equiv = "keywords" content = "keyword1 ، keyword2 ، keyword3"> <meta http-equiv = "description" content = type = "text/css" href = "styles.css" rel = "خارجي nofollow"> -> <script type = "text/javaScript"> function _change () {/ * 1. الحصول على عنصر IMG 2. imgele.src = "<٪ = basepath ٪> servlet/verifycodeservlet؟ a =" + date (). إذا كان فارغًا ، فسيتم عرضه: "" إذا لم يكن فارغًا ، فسيتم عرضه: قيمة ملف تعريف الارتباط */string uname = "" {// ابحث عن ملف تعريف الارتباط المسمى Uname uname = c.getValue () ؛ // احصل على قيمة ملف تعريف الارتباط هذا وإعطاء المتغير uname}}} ٪> <٪ string message = "" ؛ string msg = (string) request.getAttribute ("msg") ؛ // احصل على السمة المسماة msg في حقل الطلب if (msg! = null) {message = msg ؛ } ٪> <font color = "red"> <b> <٪ = message ٪> </b> </font> <form action = "servlet/loginservlet" method = "post"> <٪-أظهر اسم المستخدم في ملف تعريف الارتباط إلى مربع نص اسم المستخدم-٪> اسم المستخدم: <input type = "text" name = "username" name = "password"/> <br/> رمز التحقق: <type type = "text" name = "verifyCode" size = "3"/> <img id = "img" src = "<٪ = basepath ٪> servlet/verifyCodeservlet value = "login"/> </mapp> </body> </html>loginsuccessess:
<Body> <h1> Succ1 </h1> <٪ username = (String) session.getAttribute ("اسم المستخدم") ؛ if (username == null) {/ * 1. احفظ رسالة الخطأ إلى مجال الطلب وإعادة توجيهها إلى تسجيل الدخول. request.getRequestDispatcher ("/login.jsp"). العودة ؛} ٪> مرحبًا ، ترحيبًا دافئًا ، مرحبًا <%=username %> لتوجيه العمل!
</body> </html>
ملف التكوين:
<Sradlet> <Sradlet-Name> loginservlet </rectlet-name> <Servlet-class> com.lhy.web.servlet.loginservlet </rectlet-class> </radlet> <radlet mapping> <cervlet-mapplet> <urvlet-name> loginservlet </servlet-name> <url-pattern> <Vervlet> <Sradlet-Name> VerifyCodeservlet </rectlet-name> <Servlet-class> com.lhy.web.servlet.verifyCodeservlet </rectlet-class> </rendl> <cervlet mapping> <verlet-name> verifyCodeservlet </servlet-name> </servlet mapping>
اقتراح: من الأفضل تعيين Servlet الذي يولد رمز التحقق بدون ذاكرة التخزين المؤقت ، بحيث لا تحتاج إلى إضافة طابع زمني عندما تطلب الصفحة صورة رمز التحقق. إضافة الطابع الزمني هو خداع المتصفح لمنع المتصفح من قراءة صورة رمز التحقق في ذاكرة التخزين المؤقت ، ولا توجد استجابة بعد النقر لتغييرها. هذا ليس شيئًا جيدًا. في كل مرة أقوم فيها بتغيير صورة أخرى ، سيقوم المتصفح بتخزين الصور التي تم الحصول عليها حديثًا محليًا. إذا لم يتم تخزينه مؤقتًا في Servlet ، فلن يتم تخزينه محليًا.
لخص
ما ورد أعلاه هو رمز مثال أداة التحقق من Java التي قدمتها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!