لقد تعلمت المرشحات من قبل ، لكن المرشحات مخصصة للخدمات ويتم استخدامها في SPRINGMVC و SPRING BOOTS. إنهم لا يشعرون فائدة للغاية من حيث الوظائف.
دعنا نتعرف على المعترضات هنا.
1. ترتيب تنفيذ المعترض
1. المحتويات
2. اعتراض
في الاعتراض ، أضفت ثلاثة (أولاً ، اثنان ، ثالث) ، لكن المحتويات هي نفسها تقريبًا.
package org.elvin.boot.Interceptor ؛ استيراد org.springframework.web.servlet.handlerinterceptor ؛ استيراد org.springframework.web.servlet.modelandview يقوم FirstInterceptor بتنفيذ HandlerInterceceptor {Override Public Boolean Prehandle (httpservletrequest httpservletrequest ، httpservletresponse httpservletresponse ، كائن O) استثناء {system.out.println ("FirstInterceptor prehandle") ؛ العودة صحيح. } Override public void postthandle (httpservletrequest httpservletrequest ، httpservletresponse httpservletresponse ، Object O ، modelandview) يلقي الاستثناء {system.out.println ("posthandle firstinterceptor") ؛ } Override public void AfterCompletion (httpservletrequest httpservletrequest ، httpservletresponse httpservletresponse ، object o ، استثناء e) يلقي استثناء {system.out.println ( }}يعود Prehandle بشكل صحيح قبل أن يستمر التنفيذ التالي.
تسجيل اعتراض:
package org.elvin.boot.Interceptor ؛ استيراد org.springframework.context.annotation.configuration ؛ استيراد org.springframework.web.servlet.config.annotation.Interceptorregistry ؛ استيراد org.springframework.web.servlet.config.annotation.webmvcConfigureRadapter ؛ configurationpublic class registerInterceptor يمتد webmvcconfigureRadapter registry.addInterceptor (new twoInterceptor ()) ؛ registry.addInterceptor (New InterNitpector ()) ؛ Super.AddInterceptors (السجل) ؛ }}
من أجل التحقق من ترتيب التنفيذ ، يتم استخدام Thymeleaf هنا ، ثم تم الوصول إلى الخصائص التي مررت بها في الخلفية في المقدمة. عند الوصول ، سيتم طباعة المعلومات إلى وحدة التحكم
حزمة org.elvin.boot.pojo ؛ كتاب الفئة العامة {اسم السلسلة الخاصة ؛ السلسلة العامة getName () {system.out.println ("view: book'Name is" + name) ؛ اسم العودة } public void setName (اسم السلسلة) {this.name = name ؛ }}وحدة التحكم:
package org.elvin.boot.controller ؛ استيراد org.elvin.boot.pojo.book ؛ استيراد org.springframework.stereotepee.controller org.springframework.web.bind.annotation.requestmapping ؛@controller@requestMapping ("first") الفئة العامة الأولى controller {private string controlerpath = "first/" ؛ getMapping ("index") فهرس السلسلة العامة (نموذج النموذج) {system.out.println ("Controller: FirstController Index Do ...") ؛ كتاب كتاب = كتاب جديد () ؛ book.setName ("spring boot") ؛ model.addattribute ("book" ، book) ؛ إرجاع ControlerPath + "INDEX" ؛ }}منظر:
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"/> <title> العنوان </title> </head> <body> <h1 th: text = "$ {book.name}"> </html> </html>عند الوصول إلى LocalHost: 8080/First/Index ، سيتم إخراج معلومات الاستجابة على وحدة التحكم.
وبهذه الطريقة ، يمكن رؤية ترتيب تنفيذ اعتراض واحد.
1. طريقة prehandle التي تم تنفيذها قبل تنفيذ طريقة وحدة التحكم
2. تنفيذ طريقة عمل وحدة التحكم
3. بعد تنفيذ الإجراء ، قبل تحليل العرض (إن وجد) ، قم بتنفيذ طريقة postthandle للاعتراض
4. تحليل الرأي
5. بعد التحليل ، قم بتنفيذ طريقة Aftercompletion
عند تسجيل اعتراضات متعددة ، يكون أمر التنفيذ كما هو موضح في الشكل.
2. اعتراض ينفذ التحقق من الإذن
وبالمثل ، أضف اعتراض الإذن أولاً
package org.elvin.boot.Interceptor ؛ استيراد org.elvin.boot.annotation.nologin ؛ استيراد org.springframework.util.stringutils ؛ import org.springframework.web.method.handlermethod org.springframework.web.servlet.modelandview ؛ استيراد javax.servlet.http.httpservletrequest Prehandle (طلب httpservletrequest ، استجابة httpservletresponse ، مقبض الكائن) يلقي الاستثناء {handlermethod method = (handlermethod) مقبض ؛ class <؟> controllerType = method.getBeanType () ؛ if (method.getMethodAnnotation (nologin.class)! = null || controllerType.getAnnotation (nologin.class)! = null) {return true ؛ } جلسة httpsession = request.getSession () ؛ string token = (string) session.getAttribute ("token") ؛ if (! stringUtils.isempty (token)) {return true ؛ } response.sendRedirect ("/login/index") ؛ العودة كاذبة ) httpservletresponse ، كائن O ، استثناء E) يلقي الاستثناء {}}ثم قم بتسجيل اعتراض الإذن
package org.elvin.boot.Interceptor ؛ استيراد org.springframework.context.annotation.configuration ؛ استيراد org.springframework.web.servlet.config.annotation.Interceptorregistry ؛ استيراد org.springframework.web.servlet.config.annotation.webmvcConfigureRadapter ؛ configurationpublic class registerInterceptor يمتد webmvcconfigureRadapter Super.AddInterceptors (السجل) ؛ }}
إضافة وحدة تحكم تسجيل الدخول إلى وحدة التحكم ، ووفر صفحة تسجيل الدخول وطريقة تسجيل الدخول
حزمة org.elvin.boot.controller ؛ استيراد org.elvin.boot.annotation.nologin ؛ استيراد org.springframework.beans.factory.annotation.autowired org.springframework.web.bind.annotation.postmapping ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.responsebonder ؛ javax.servlet.http.httpservletresponse ؛ import javax.servlet.http.httpsession ؛@nologin@controller@requestMapping ("login") logincontroller {autowired httpservlequest ؛ Autowired الخاص httpservletresponse ؛ سلسلة ControlerPath = "login/" ؛ // @nologingetMapping ("index") public string index () {httpsession session = request.getSession () ؛ session.setAttribute ("token" ، "token") ؛ إرجاع ControlerPath + "INDEX" ؛ } // @nologinpostMapping ("checkout") reSponsebody public string checkout () {httpsession session = request.getSession () ؛ session.setAttribute ("token" ، null) ؛ العودة "موافق" ؛ }}لقد قمت هنا بتوضيح خالي من تسجيل الدخول ، والذي يمكن إضافته إلى وحدة التحكم أو إلى الإجراء.
package org.elvin.boot.annotation ؛ import java.lang.annotation.ElementType ؛ import java.lang.annotation.retention ؛ import java.lang.annotation.retentionpolicy ؛ import java.lang.annotation.target ؛ target ؛ elementType.method}) @attreence (enthinationpolicy.runtime) public interface nologin {}لا يلزم وجود محتوى في التعليقات التوضيحية.
صفحة تسجيل الدخول (صفحة تسجيل الدخول هنا فقط للتسجيل ، لذلك بعد زيارة هذه الصفحة ، فهذا يعني أن تسجيل الدخول ناجح).
<! doctype html> <html xmlns: th = "http://www.thymeleaf.org"> <head> <meta charset = "utf-8"/> <title> العنوان </head> </head> <body> <div> Th: src = "@{/js/jquery-1.11.1.js}"> </script> <script th: inline = "javaScript"> $ (function () {$ (". container"). deving ("#checkout" ، البيانات: {} ، الدالة (الدقة) {if (des == "OK") {Alert ( }) ؛ </script> </body> </html>طريقة توضيح النتائج:
في المتصفح ، افتح أولاً http: // localhost: 8080/تسجيل الدخول/الفهرس ، ثم الوصول إلى http: // localhost: 8080/first/index page في علامة التبويب الجديدة.
ستجد أنه عند الوصول إلى First/Index ، يمكنك الوصول إليه.
في هذا الوقت ، في صفحة تسجيل الدخول/الفهرس ، انقر فوق زر تسجيل الدخول ، قم بتحديث الصفحة الأولى/الفهرس ، وسوف تقفز إلى صفحة تسجيل الدخول مباشرة.
المثال أعلاه شرح لسلسلة التمهيد والتقاطع المخصص هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.