في حياتنا ، من الشائع جدًا بالفعل تسجيل الدخول التلقائي إلى الحسابات ، لذلك نستخدم المرشحات لتنفيذ هذه الوظيفة.
يقدم بشكل أساسي تسجيل الدخول التلقائي للمستخدم وتسجيل الدخول التلقائي الذي تم إلغاؤه ، بالإضافة إلى تحقيق تسجيل الدخول التلقائي في يوم واحد أو أيام. بعد إضافة IP للمستخدم إلى القائمة السوداء ، يستخدم الفلتر مباشرة للعودة إلى صفحة تحذير.
وظيفة المرشح قوية جدا. نحتاج فقط إلى إضافة Servlet بعد الواجهة الخلفية المكتوبة في الواجهة الأمامية لإدراك هذه الوظيفة.
ملاحظة: هذا مجرد مظاهرة. قمت بمحاكاة جزء قاعدة بيانات الوصول بنفسي ، مع التركيز بشكل أساسي على تحقيق وظيفة تسجيل الدخول التلقائية.
رمز مكتب الاستقبال:
ما إذا كان رمز المقدمة ناجحًا أم لا يتم عرضه في هذه الصفحة. التقنيات المستخدمة: تطبيق علامات JSTL ، قيمة قراءة الجلسة
<٪@ page language = "java" import = "java.util. <html> <head> </head> <body> <c: if test = "$ {! فارغة sessionscope.error}"> كلمة المرور أو اسم المستخدم خاطئ. <!-بعد العرض ، تحتاج إلى إزالة القيمة داخل-> <C: إزالة var = "خطأ" Scope = "Session"/> </c: if> <c: if test = "$ {$ {frank sessionscope.user}" var = "boo"> <h2> هذه هي الصفحة لتسجيل الدخول </h2> <form = " type = "text" name = "name" /> <br/> pwd: <input type = "text" name = "pwd" /> <br/> لم يتم تسجيل تسجيل الدخول تلقائيًا: <input type = "radio" name = "time" value = "0" /> <br/> يوم واحد: <input type = "time" time = "value = 1" /> <br/> <إدخال type = "إرسال" value = "إرسال"/> </form> </c: if> <c: if test = "$ {! boo}" value = '/cancelautologin' //> "> cancelautologin </a> </c: if> </body> </html>رمز تنفيذ servlet:
مثل الكود السابق ، فهو مسؤول فقط عن التفاعل مع مكتب الاستقبال: التكنولوجيا المستخدمة في ترميز عنوان URL ، والقيمة موجودة في ملف تعريف الارتباط ، والجلسة في الصفحة ، ويتم قفز الصفحة (مع إعادة توجيهها)
DOPOST public void (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {string name = request.getParameter ("name") ؛ سلسلة pwd = request.getParameter ("pwd") ؛ وقت السلسلة = request.getParameter ("الوقت") ؛ if (name! = null && pwd! = null && name.equals (pwd)) {// اكتب هنا كما تريد ، يجب أن تذهب إلى الخدمة-> dao للوصول إلى قاعدة البيانات لاحقًا // على افتراض أن تسجيل الدخول قد ناجح ، نقوم بتخزين المعلومات في request.getsession (). // متوافق مع الصينية ، نحتاج إلى تشفير name = urlencoder.encode (الاسم ، "UTF-8") ؛ pwd = urlencoder.encode (pwd ، "utf-8") ؛ ملف تعريف الارتباط C = جديد ملف تعريف الارتباط ("autologin" ، name+"،"+pwd) ؛ // لا يمكن استخدام هذه القيمة بهذه الطريقة. لاعتبارات الأمان ، يجب أن نعرف استخدام التشفير أو التشفير الثانوي ، int _time = 60*60*24*integer.valueof (time) ؛ C.SetMaxage (_time) ؛ استجابة. addcookie (c) ؛ Response.SendRedirect (request.getContextPath ()+"/index.jsp") ؛ // الإعداد الافتراضي في المرشح هو اعتراض إعادة التوجيه ، وإعادة التوجيه الداخلي المباشر. ومع ذلك ، ليس من السهل التعامل مع المرشح ، لكنك تحتاج فقط إلى تكوينه في web.xml. } آخر {request.getSession (). setAttribute ("error" ، "1") ؛ Response.sendRedirect (request.getContextPath ()+"/index.jsp") ؛ }}حتى الآن ، أشعر أنه لا توجد تقنية. نفس الرمز مثل الرمز السابق هو وظيفة المرشح.
تسجيل الدخول الآمن:
استخدمنا الاستيراد الديناميكي لتسجيل الدخول بأمان من قبل ، وذلك لمنع المستخدمين من تسجيل الدخول دون تسجيل الدخول بعد إدخال المشروع. يمكنك إدخال الواجهة في الإرادة عن طريق إدخال المشروع. يمكن للاستيراد الديناميكي تحقيق هذه الوظيفة ، ولكن من الأفضل استخدام المرشحات.
بشكل عام ، يتم كتابة Dofilter () في المرشح ؛ تحتاج فقط إلى تحديد ما إذا كانت حاوية الجلسة فارغة. هذا يعني أن هذا لم يتم تسجيل الدخول. ما عليك سوى العودة إلى واجهة تسجيل الدخول. خلاف ذلك ، دعها تذهب
تم تقديم الرمز:
dofilter public void (طلب servletRequest ، استجابة servletResponse ، سلسلة filterchain) يلقي IoException ، servleTexception {httpservletrequest req = (httpservletrequest) ؛ httpservletresponse resp = (httpservletresponse) ؛ STRING SETATE = (String) req.getSession (). getAttribute ("user") ؛ if (session == null) {system.out.println ("login abnormal") ؛ Resp.SendRedirect (req.getContextPath ()+"/index.jsp") ؛ } آخر {system.out.println ("تسجيل الدخول الناجح") ؛ Chain.Dofilter (REQ ، RESP) ؛ }}تشفير الأحرف:
مشكلة تشفير الشخصية. في الماضي ، اضطررت إلى إدخالها يدويًا في Dopost () من servlet في كل مرة ، request.setcharacterencoding ("UTF-8") ؛ يحتاج كل servlet إلى مدخلات ، وهو أمر مزعج للغاية ، لذلك نستخدم المرشحات لتنفيذها ؛
تم تقديم الرمز:
<span style = "font-size: 18px ؛"> public void dofilter (servletRequest request ، servletResponse ، سلسلة filterchain) ترمي ioException ، servletexception {request.setcharacterencoding (charace) ؛ Chain.dofilter (طلب ، استجابة) ؛ } override public void init (filterConfig config) يلقي servletexception {character = config.getInitParameter ("حرف") ؛ // a </span> <span style = "font-size: 18px ؛ font-family: arial ، helvetica ، sans-serif ؛"> haracter set as a glob } </span>يتم تعريف الحرف أعلاه على أنه متغير عالمي ، ويتم تكوين القيمة الأولية في web.xml.
يتم تقديم رمز web.xml:
<Ivilter> <ilter-name> حرف </filter-name> <lipter-class> cn.hncu.filter.characterfilter </filter-class> <Ing-param> <param-name> حرف </param-name> <Param-value> utf-8 </baram-value> </ith-param>
تسجيل الدخول التلقائي:
الفكرة الرئيسية: يتطلب تسجيل الدخول التلقائي تحديد أن الجلسة لها قيم. إذا كان هناك ، بعد تسجيل الدخول ، إذا لم يكن هناك ، انتقل إلى ملف تعريف الارتباط المحلي للعثور عليه ، والوجود ، ومطابقة قاعدة البيانات. إذا نجحت المباراة ، أضف حاوية الجلسة.
تم تقديم الرمز:
Dofilter public void (طلب servletRequest ، استجابة servletResponse ، سلسلة filterchain) يلقي ioException ، servletexception {// تسجيل الدخول تلقائيا ، يجب تعيين أن هناك قيم في الجلسة. إذا كان هناك ، فأنت قمت بتسجيل الدخول ولا ، يجب عليك الوصول إلى البيانات الموجودة في ملف تعريف الارتباط. البيانات الموجودة في ملف تعريف الارتباط // ما إذا كانت تتطابق مع قاعدة البيانات؟ نعم ، اضبط القيمة في الجلسة هنا ، لا ، دع HttPservletRequest req = (httpservletrequest) طلب ؛ httpservletresponse resp = (httpservletresponse) ؛ STRING SETATE = (String) req.getSession (). getAttribute ("user") ؛ if (session == null) {// يشير إلى أنه لم يتم تسجيل أي ملف تعريف ارتباط في الوقت الحالي cs [] = req.getCoOkies () ؛ if (cs! = null) {for (cookie c: cs) {if (c.getName (). equals ("autologin")) {string value = c.getValue () ؛ // هذا مشفر ، لكننا متصلون فقط بالفواصل. String [] strs = value.split ("،") ؛ // في logserlvet ، نستخدم الترميز أولاً ، ثم اتصال الفاصلة. نحن بحاجة إلى عكس اسم السلسلة = urldecoder.decode (strs [0] ، "UTF-8") ؛ سلسلة pwd = urldecoder.decode (strs [1] ، "utf-8") ؛ // احصل على اسم ، بيانات PWD إلى الخلفية للوصول إلى قاعدة البيانات ، نكتب فقط إذا (name.equals (pwd)) {req.getSession (). }}}}} سلسلة. . }المستخدمين المدرجين في القائمة السوداء
المستخدمون المدرجين في القائمة السوداء ، وليس تسجيل الدخول ، فقط أخبرهم بالنتيجة
تم تقديم الرمز:
dofilter public void (طلب servletRequest ، استجابة servletResponse ، سلسلة filterchain) يلقي IoException ، servleTexception {httpservletrequest req = (httpservletrequest) ؛ httpservletresponse resp = (httpservletresponse) ؛ سلسلة IP = req.getRemoteadDr () ؛ // الحصول على IP ؛ System.out.println (IP+"iipp") ؛ if (set.contains (ip)) {// داخل system.out.println ("set") ؛ resp.getWriter (). print ("أنت في القائمة السوداء .. <a href = '"+req.getContextPath ()+"/index.jsp'> return </a>") ؛ // الإرجاع غير ممكن ، لأن الفهرس يعترض مباشرة عند الطلب من الخادم} آخر {chain.dofilter (req ، resp) ؛ }} النوع الذي تم إرجاعه بواسطة القائمة السوداء هو الأفضل. أضفتها يدويًا هنا. يجب أن أقرأها في الأصل من قاعدة البيانات عن طريق كتابة فئة الأدوات. لا يمكن فحصه فحسب ، بل أيضًا إضافة وحذف وتعديل القائمة السوداء.
تم تقديم الرمز:
يتم تعريف Hashset على أنه متغير عالمي ، ويحتوي SET على ، وهو فعال للغاية.
public void init (filterConfig arg0) يلقي servletexception {// هنا قائمة قائمة سوداء ، تم استردادها من قاعدة البيانات. فيما يلي مجرد مجموعة محاكاة بسيطة ("192.132.0.12") ؛ // هذا هو IP أسود ، يتم الحصول عليه من قاعدة بيانات الخلفية. set.add ("LocalHost") ؛ set.add ("192.132.32.4") ؛ set.add ("127.0.0.1") ؛ }إلغاء تسجيل الدخول التلقائي
عندما يُعتبر تسجيل الدخول التلقائي دائمًا غير آمن ، قمنا بتعيين عدم وجود تسجيل الدخول التلقائي
لقد عرفنا قبل أن تسجيل الدخول التلقائي يعتمد على التكنولوجيا المخزنة في ملفات تعريف الارتباط ، لذلك نحتاج هنا فقط إلى حذف ملفات تعريف الارتباط.
نظرًا لأن إلغاء تسجيل الدخول التلقائي هو ارتباط تشعبي ، فهو مكتوب كخدمة.
تم تقديم الرمز:
يرمي dopost public void (httpservletrequest req ، httpservletresponse resp) servleTexception ، ioException {cookie cc = new cookie ("autologin" و "") cc.setMaxage (0) ؛ cc.setPath (req.getContextPath ()) ؛ Resp.Addcookie (CC) ؛ Resp.SendRedirect (req.getContextPath ()+"/index.jsp") ؛ }ما سبق يمكن أن يدرك وظائف الإجابة المختصرة هذه.
ما سبق هو شرح مفصل للمعرفة ذات الصلة التي قدمها المحرر إلى Javaee باستخدام مرشحات لتحقيق تسجيل الدخول التلقائي وتأمين تسجيل الدخول لإلغاء تسجيل الدخول التلقائي. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!