In diesem Artikel wird hauptsächlich den SpringMVC -Interceptor wie folgt vorgestellt:
1.DispatcherServlet
SpringMVC verfügt über einen einheitlichen Eintrags -DispatcherServlet, und alle Anfragen werden durch DispatcherServlet geleitet.
DispatcherServlet ist ein Vorkontroller, der in der Datei web.xml konfiguriert ist. Um übereinstimmende Anfragen abzufangen, müssen die Regeln für den Servlet -Abfangen -Matching für sich selbst definiert werden, und die abgefangenen Anfragen werden gemäß bestimmten Verarbeitungsregeln an den Zielcontroller verteilt. Daher fügen wir nun Web.xml die folgende Konfiguration hinzu:
<!-Bei der Initialisierung des Dispatcherservlets sucht das Framework im Web-Inf-Verzeichnis von Webanwendungen nach einer Datei namens [Servlet-NAME] -Servlet.xml und definiert die relevanten Bohnen dort, wobei alle global definierten Bohnen definiert sind-> <servlet> <Servlet-name> Springmybatis </servlet-name> <Servlet-Class> org.springframework.web.servlet.DispatcherServlet </Servlet-Class> <Load-on-Startup> 1 </load-on-Startup> </Servlet> <Servlet-Mapping> <Servlet-name> Springmybatis </servlet-name> <! </Servlet-Mapping>
2. Statische Ressourcen fangen nicht ab
Wenn Sie nur den Abfangen von URLs wie das *.DO -Format konfigurieren, gibt es kein Problem beim Zugriff auf statische Ressourcen. Wenn die Konfiguration jedoch alle Anforderungen abfängt (z. B. oben "/", die oben konfiguriert wurden), werden statische Ressourcen wie JS -Dateien, CSS -Dateien und Bilddateien nicht zugegriffen.
Im Allgemeinen wird der Interceptor hauptsächlich für das Erlaubnismanagement implementiert, wodurch einige URL -Anfragen hauptsächlich abfasst, sodass statische Ressourcen nicht abgefangen werden. Es gibt im Allgemeinen zwei Möglichkeiten, statische Ressourcen herauszufiltern.
Der erste ist die Verwendung von <MVC: Standard-Service-Handler /> (im Allgemeinen ist der Standard-Servlet-Name des Webanwendungsservers "Standard". Hier aktivieren wir Tomcats Standard-Servlet, um statische Dateien zu verarbeiten und den folgenden Code in web.xml zu konfigurieren :) :) :)
<!- Das Servlet ist für Behälter wie Tomcat, Stegy usw. bereitgestellt und ändert die statische Ressourcenzuordnung von / nach / static / Verzeichnis. Zum Beispiel, wenn Sie http: //localhost/foo.csss besucht haben, jetzt http: //localhost/static/foo.css-> <!-keine statischen Dateien abfangen-> <Servlet-Maping> <Servlet-Name <URL-Muster>/CSS/*</URL-Muster> <URL-Muster>/Bilder/*</url-pufter> <URL-Muster>/Schriftarten/*</url-pattern> </servlet-maping>
Tomcat, Jetty, Jboss und Glassfish Der Name des Standard-Servlets-"Standard"
Harz den Namen des Standard-Servlets --- "Harz-File"
Weblogic Standard Servlet-Name-"Dateiservlet"
WebSphere-Standard-Servlet-Name-"SimpleFileServlet"
Wenn der Standard-Servlet-Name aller Ihrer Webanwendungsserver nicht "Standard" ist, müssen Sie die angegebene über die Eigenschaft für den Standard-Service-Namen anzeigen:
<MVC: Standard-Service-Handler Standard-Service-name = "Der vom Webserver verwendete Servlet-Name" />
Der zweite Typ besteht darin, <MVC: Ressourcen /> zu verwenden und den folgenden Code zur Konfigurationsdatei SpringMVC hinzuzufügen:
<MVC: Ressourcen maping = "/js/**" location = "/static_resources/javaScript/"/> <mvc: ressourcen maping = "/styles/** location ="/static_resources/cSS/"/> <mvc: ressourcen maping
3. Custom Interceptor
Der Interceptor HandlerInterceptoradapter von SpringMVC bietet drei Methoden vorhanden, Posthandle und Nachkommen. Prehandle wird aufgerufen, bevor der Serviceprozessor die Anfrage verarbeitet.
Posthandle wird ausgeführt, nachdem der Geschäftsprozessor die Ausführung der Anfrage abgeschlossen und die Ansicht generiert. Aftercompletion wird aufgerufen, nachdem der DispatcherServlet die Anfrage vollständig bearbeitet hat und zur Bereinigung von Ressourcen usw. verwendet werden kann, um Ihre eigene Logik für die Erlaubnisverwaltung zu implementieren.
Fügen Sie zunächst meinen eigenen definierten Interceptor zu SpringMvc.xml hinzu. Meine Implementierungslogik CommonInterceptor.
<!-Konfigurieren Sie Interceptors, mehrere Interceptors, führen Sie nacheinander aus-> <MVC: Interceptors> <mvc: Interceptor> <!-dem URL-Pfad. Wenn Sie nicht konfigurieren oder/**, werden alle Controller abgefangen-> <MVC: Mapping Path = "/user/**"/> <MVC: Mapping Path = "/test/**"/> <bean> </bean> </mvc: Interceptor> <! in umgekehrter Reihenfolge -> </mvc: Interceptors>
Meine Abfangen -Logik lautet "Vor dem Anmeldung springt jede Zugriffs -URL zur Anmeldeseite. Nach dem erfolgreichen Anmeldung, springen Sie zur vorherigen URL", der spezifische Code lautet wie folgt:
/ ** * */ package com.alibaba.Interceptor; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.web.servlet.ModelandView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.alibaba.util.requestutil; / ** * @Author TFJ * 2014-8-1 */ public class CommonInterceptor erweitert HandlerInterceptOrAdapter {private endgültige Logger log = loggerfactory.getLogger (CommonInterceptor.class); public static final String last_page = "com.alibaba.lastpage"; / * * Verwenden Sie die reguläre Zuordnung auf den Pfad, der private String mapingurl abgefangen werden muss. public void setMapingurl (String mapPingurl) {this.mappingurl = mapPingurl; } * / / ** * Berufen Sie vor dem Geschäftsprozessor die Anforderung * Wenn false zurückgegeben wird. postCompletion () aus dem letzten Interceptor */ @Override Public boolean Prehandle (httpServletRequest -Anforderung, HttpServletResponse -Antwort, Objekthandler) löst Ausnahme aus {if ("get" .equalSignoreCase (Request. } log.info ("=============== 执行顺序: 1 、 prehandle ==============="); String requesturi = request.getRequesturi (); String contextPath = request.getContextPath (); String url = requesturi.substring (contextPath.length ()); log.info ("Requesturi:"+Requesturi); log.info ("contextPath:"+contextPath); log.info ("url:"+url); String userername = (String) request.getSession (). GetAtTribute ("Benutzer"); if (userername == null) {log.info ("interceptor: springen Sie zur Anmeldeseite!"); request.getRequestDispatcher ("/web-inf/jsp/login.jsp"). Weiterleiten (Anfrage, Antwort); false zurückgeben; } sonst return true; } / *** Nachdem der Geschäftsprozessor die Verarbeitung der Anforderung abgeschlossen hat, wird die vor der Ansicht erzeugte Aktion der modelAndView Daten hinzufügen, wie z. log.info("=========================================================================================================== log.info("========================================================================================== ===========================================================ieben ==========================================================ieben ===========================================================ieben Antwort, Objekthandler, Ausnahme ex) löst Ausnahme aus {log.info ("============== 执行顺序: 3 、 AfterCompletion =============="); Hinweis: Im obigen Code habe ich ein RequestUtil geschrieben, der hauptsächlich Funktionen wie das Erhalten des aktuellen Anfrage, das Sitzungsobjekt, das Speichern und Verschlüsseln von Seiten und das Aufnehmen implementiert.
Zu diesem Zeitpunkt wurde der Interceptor implementiert, und der Effekt ist wie in der Abbildung dargestellt:
Ich werde durch Besuch /Test /Hallo direkt blockiert
Nach erfolgreicher Anmeldung wird es zu der Seite entsprechend /testen /Hallo springen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.