Dieser Artikel untersucht hauptsächlich die Einführung von Interceptors in SpringMVC, Beispielcode, Konfiguration und anderen Inhalten wie folgt.
Der Prozessor-Interceptor von SpringMVC ähnelt dem Filterfilter in der Servletentwicklung, mit dem der Prozessor vorverarbeitet und nach dem Verarbeitung nachbearbeitet wird. Dieser Artikel fasst hauptsächlich zusammen, wie der Interceptor in SpringMVC sowie die Ausführung und Verwendung des Interceptors definiert wird.
Definieren Sie in SpringMVC den Interceptor, um die Handlerinterceptor -Schnittstelle zu implementieren und die drei in der Schnittstelle bereitgestellten Methoden wie folgt zu implementieren:
// Testen Sie Interceptor1Public Class HandlerInterceptor1 implementiert HandlerInterceptor {@Override public boolean prehandle (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekthandler) löst Ausnahme {System.out.Println ("Handlerinterceptor1 .... Pre -Herdle"). True Means Release Return true;}@override public void posthandle (httpServletRequest Request, httpServletResponse -Antwort, Objekt Handler, modelandView modelandView) löst Ausnahme aus {system.out.println ("HandlerInterceptor1..poSHandle");}@public void nachCompletion (htttpletRectRect, htttpletRectRectRectRectRectRect, htttpLectrecretRectRectRectRectRection (htttpletRect "). Antwort, Objekthandler, Ausnahme ex) löst Ausnahme aus {System.out.println ("HandlerInterceptor1..afterCompletion");}}Ich werde eine einfache Analyse für diese drei Methoden durchführen:
In SpringMVC ist der Interceptor für das spezifische Handlermapping konfiguriert. Wenn ein Interceptor in einem Handlermapping konfiguriert ist, wird der Handler erfolgreich durch das Handlermapping den Interceptor verwendet. Nehmen wir beispielsweise an, dass der in der Konfigurationsdatei konfigurierte Mapper org.springframework.web.servlet.handler.BeannameUrlHandlermaping ist, können wir den Interceptor wie folgt konfigurieren:
<Bean> <Eigenschaft name = "interceptors"> <list> <ref bean = "HandlerInterceptor1"/> <ref bean = "HandlerInterceptor2"/> </list> </property> </bean> <bean id = "HandlerInterceptor1"/> <bean id = "handlerInterceptor2"/>
Wie konfigurieren Sie also in SpringMVC einen globalen Interceptor? Wie oben erwähnt, sind die Interceptors in SpringMVC auf bestimmte Mapper ausgerichtet. Um dieses Problem zu lösen, fügt das SpringMVC -Framework global ähnliche Interceptors in jedes HandleMapping injiziert, sodass sie zu globalen Interceptors werden können. Die Konfiguration ist wie folgt:
<!-Konfigurieren Sie Interceptors-> <MVC: Interceptors> <!-Mehrere Interceptors, in Sequenz ausgeführt-> <mvc: interceptor> <mvc: maping path = "/**"/> <! path = "/**"/> <bean/> </mvc: interceptor>
Im Allgemeinen verwenden wir diese Konfiguration und geben einfach die URL an, die in <MVC: Mapping> abgefangen werden soll.
Schreiben Sie zwei Interceptors, HandlerInterceptor2 und HandlerInterceptor3, gemäß der obigen Konfiguration. Dann testen wir die Ausführung der drei Abfangwäsche und machen eine verwandte Zusammenfassung.
Mit anderen Worten, wir ändern den Rückgabewert der Prehandle -Methode der drei Interceptors in True, um die Ausführungsreihenfolge des Interceptors zu testen. Die Testergebnisse sind wie folgt:
Handlerinterceptor1… .pehandle
Handlerinterceptor2… .pehandle
Handlerinterceptor3… .PrehandleHandlerinterceptor3… .posthandle
Handlerinterceptor2… .posthandle
Handlerinterceptor1… .posthandleHandlerinterceptor3… .AfterCompletion
Handlerinterceptor2… .AfterCompletion
Handlerinterceptor1… .AfterCompletion
Eine Zusammenfassung erfolgt auf der Grundlage der gedruckten Ergebnisse: Wenn alle Interceptors veröffentlicht werden, wird die Vorhandle -Methode in der Reihenfolge der Konfiguration ausgeführt. Während die beiden anderen Methoden in der Reihenfolge der Konfiguration ausgeführt werden.
Wir ändern den Rückgabewert in der Prehandle -Methode des dritten Interceptors gegen False, und die ersten beiden sind immer noch wahr, um die Ausführungsreihenfolge des Interceptors zu testen. Die Testergebnisse sind wie folgt:
Handlerinterceptor1… .pehandle
Handlerinterceptor2… .pehandle
Handlerinterceptor3… .PrehandleHandlerinterceptor2… .AfterCompletion
Handlerinterceptor1… .AfterCompletion
Machen Sie eine Zusammenfassung basierend auf den gedruckten Ergebnissen:
1. Da Interceptors 1 und 2 freigegeben werden, kann der Vorhand von Interceptor 3 ausgeführt werden. Mit anderen Worten, der vorherige Interceptor kann freigegeben werden und der letztere Interceptor kann Prehandle ausführen.
2. Interceptor 3 gibt es nicht frei, daher werden die beiden anderen Methoden nicht ausgeführt. Das heißt, wenn ein Interceptor ihn nicht freigibt, werden seine beiden anderen Methoden nicht ausgeführt.
3. Solange es einen Interceptor gibt, der nicht veröffentlicht wird, wird die Post -Handle -Methode aller Interceptors nicht ausgeführt, aber solange Vorhandle ausgeführt und freigegeben wird, wird die Nachkompetenzmethode ausgeführt.
Tatsächlich können Sie sich auf die obige Situation beziehen. Es ist ein Sonderfall. Schauen wir uns die laufenden Ergebnisse an:
Handlerinterceptor1… .pehandle
Offensichtlich wurde nur die Prehandle -Methode des ersten Interceptors ausgeführt. Da keiner von ihnen veröffentlicht wurde, hat keiner von ihnen die Post -Handle -Methode und die Aftercompletion -Methode ausgeführt.
Wenn Sie beispielsweise eine einheitliche Ausnahmeberechnungslogik schreiben möchten, muss der Interceptor in der ersten Position der Interceptor -Kette platziert werden, da nur die Nachkompetenz ausgeführt wird, und wenn sie in der ersten Position der Abfangkette in der ersten Position der Abfangkette platziert wird, wird die Aftercompletions -Methode ausführt, sodass die Logik der Ausnahmeproduktion ausgeführt wird.
Melden Sie sich beispielsweise bei der Authentifizierung an und legen Sie ihn in die erste Position im Interceptor -Link (wenn es ein einheitliches Ausnahmebehandlung gibt, sollte sie hinter der Einheit der einheitlichen Ausnahme platziert werden). Der Interceptor der Berechtigungsüberprüfung wird nach dem Anmelden beim Authentifizierungs -Interceptor platziert (da die Berechtigung erst nach dem Einloggen überprüft wird).
Hier ist ein Anmeldeverifizierungsinceptor, um zu erklären, wie der Interceptor von SpringMVC verwendet wird.
Schauen wir uns zunächst die Anforderungen an: Was wir abfangen wollen, was wir tun wollen, wenn wir abfangen. Die Idee ist wie folgt:
1. Benutzeranforderung URL
2. Interceptor führt eine Abfangen -Überprüfung durch. Wenn die angeforderte URL eine öffentliche Adresse ist (URL, auf die ohne Anmeldung zugegriffen werden kann), lassen Sie sie veröffentlicht.
Wenn die Benutzersitzung nicht vorhanden ist, springen Sie zur Anmeldeseite.
Wenn die Benutzersitzung vorhanden ist, geben Sie sie frei und setzen Sie den Vorgang fort.
// Login in @RequestMapping ("/login") öffentlicher String -Login (httpServletRequest -Anforderung, String -Benutzername, String Passwort) Ausnahme aus der Ausnahme {// Tatsächlich müssen Sie die Datenbank übereinstimmen //.../: Angenommen, das Login ist erfolgreich. "Redirect: queryItems.action";} // Login @RequestMapPing ("/logout") öffentlicher String -Logout (httpServletRequest) löst eine Ausnahme aus {httpSession session = requesty.getSession (); Session // Testen Sie Interceptor 1Public Class LoginInterceptor implementiert HandlerInterceptor {// Ausführen vor Eingabe der Handler -Methode // kann zur Identitätsauthentifizierung und zur Identitätsberechtigung verwendet werden. Wenn die Authentifizierung nicht weitergeht, bedeutet dies, dass der Benutzer nicht angemeldet ist. Diese Methode muss sie abfangen und keine weitere Ausführung. Andernfalls löst @Override Public Boolean Prehandle (HttpServletRequest Request, HttpServletResponse -Antwort, Objekthandler) Ausnahme aus {// die angeforderte urlstring -url = request.getRequesturi (); // Direquire, ob die URL -Öffentlichkeit öffentlich zugänglich ist. Adresse if (url.indexof ("login.action")> 0) {// Wenn die Anmeldeeinreichung durchgeführt wird, return true;} // Richter SessionhttpSession Session Geben Sie an, dass die Identität des Benutzers verifiziert werden muss, zur Anmeldeseitenanforderung.Konfigurieren Sie dann den Interceptor:
<!-- Configure interceptors--><mvc:interceptors> <!-- Multiple interceptors, execute in sequence--> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- Intercept all urls including suburl paths--> <bean/> </mvc:interceptor> <!-- Other interceptors--></mvc:interceptors>
Auf diese Weise werden wir, wenn wir eine URL anfordern, vom gerade definierten Interceptor erfasst, und dann werden wir feststellen, ob in der Sitzung Benutzerinformationen vorhanden sind. Wenn nicht, werden wir zur Anmeldeseite springen und uns anmelden:
<form action = "$ {pageContext.request.contextPath} /login.Action" method = "post"> username: <input type = "text" name = "userername" /> <br> Passwort: <Eingabe type = "password" name = "password" /> <br> <Eingabe type = "subine" name = "sublyDies ist im Grunde die Einführung in die Verwendung von Abfangjäger.
Das obige ist der gesamte Inhalt dieses Artikels über die detaillierte Erläuterung des Interceptors in SpringMVC und der Code -Beispiele. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!