Heim >Java >javaLernprogramm >Wie implementiert man Java-Filter und Interceptors?

Wie implementiert man Java-Filter und Interceptors?

WBOY
WBOYnach vorne
2023-05-10 08:10:121406Durchsuche

1. Ähnlichkeiten zwischen Filtern und Interceptoren

1. Interceptoren und Filter verkörpern beide die Idee von AOP und können Anforderungsmethoden abfangen, indem sie die Methodenimplementierung verbessern.

2. Sowohl Interceptoren als auch Filter können die Ausführungsreihenfolge über die Order-Anmerkung festlegen

2 Der Unterschied zwischen Filtern und Interceptoren

In der Java-Webentwicklung sind sowohl Filter (Filter) als auch Interceptoren (Interceptor) gemeinsame Komponenten für die Handhabung zwischen Anfragen und Antworten. Ihre Hauptunterschiede sind wie folgt:

  • Verschiedene Ausführungsorte: Der Filter ist eine Komponente, die zwischen dem Webserver und dem Servlet-Container läuft und alle Anfragen und Antworten im und aus dem Container abfangen kann, während der Interceptor auf einen bestimmten abzielt Controller-Methoden, die die Abfangverarbeitung durchführen, werden nur innerhalb des Controllers ausgeführt.

  • Die Ausführungsreihenfolge ist unterschiedlich: Die Ausführungsreihenfolge von Filtern wird durch die Reihenfolge bestimmt, in der sie in der Datei web.xml deklariert werden, und sie werden in der Reihenfolge der Deklaration ausgeführt, während die Ausführungsreihenfolge von Interceptoren zugrunde liegt über ihre Deklaration in der Konfigurationsdatei Die Reihenfolge wird bestimmt, das heißt, der Abfangjäger kann die Reihenfolge angeben.

  • Die Funktionen sind unterschiedlich: Filter werden hauptsächlich zum Vorverarbeiten und Filtern von Anforderungen verwendet, z. B. zum Festlegen von Zeichensätzen, zur Anmeldeüberprüfung, zur Protokollierung usw., während Interceptoren hauptsächlich zum Verarbeiten von Anforderungen wie Berechtigungsüberprüfung und Parameterinjektion verwendet werden. Ausnahmebehandlung und andere Vorgänge.

  • Abhängig von verschiedenen Frameworks: Filter werden basierend auf der Servlet-Spezifikation implementiert und hängen nicht von einem bestimmten Framework ab, während Interceptoren normalerweise für ein bestimmtes Framework oder eine bestimmte Bibliothek implementiert werden, wie z. B. den Interceptor im Spring MVC-Framework.

Zusammenfassend lässt sich sagen, dass Filter und Interceptoren bestimmte Unterschiede in den Implementierungsmethoden, Funktionen und Verwendungsszenarien aufweisen. Entwickler können geeignete Komponenten entsprechend den spezifischen Anforderungen auswählen.

3. Implementierung von Filtern und Interceptoren

  • Konfigurieren der Webebene in filter web.xml

In der Java-Webentwicklung werden Filter hauptsächlich zum Vorverarbeiten und Filtern von Anforderungen verwendet Implementierung der javax.servlet.Filter-Schnittstelle. Die spezifischen Schritte lauten wie folgt:

Erstellen Sie eine Java-Klasse, implementieren Sie die Schnittstelle javax.servlet.Filter und implementieren Sie die Methode doFilter().

javaCode kopieren öffentliche Klasse MyFilter implementiert Filter { public void init(FilterConfig config) throws ServletException { // Filterinitialisierungsvorgang }

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    // 过滤器处理逻辑
    // 对request和response进行预处理
    // 调用chain.doFilter()方法,将请求传递给下一个过滤器或Servlet
    chain.doFilter(request, response);
    // 对response进行后处理
}
public void destroy() {
    // 过滤器销毁操作
}
  • Deklarieren Sie den Filter in der Datei web.xml und geben Sie das URL-Muster an.

  • xmlKopieren Sie den Code myFilter com.example.MyFilter myFilter /*

Im obigen Code gibt filter-name den Namen des Filters an, filter-class gibt die Implementierungsklasse des Filters an Das URL-Muster, das vom Filter abgefangen werden soll. /* bedeutet, dass alle Anfragen abgefangen werden.

  • Stellen Sie die Webanwendung erneut bereit, starten Sie den Server und verwenden Sie diesen Filter, um Anforderungen vorzuverarbeiten und zu filtern.

Es ist zu beachten, dass Sie beim Implementieren eines Filters Initialisierungsparameter, ServletContext und andere Informationen über das FilterConfig-Objekt erhalten können, um eine verfeinerte Filterung zu erreichen. Gleichzeitig muss in der Methode doFilter () die Methode doFilter () des FilterChain-Objekts aufgerufen werden, um die Anforderung an den nächsten Filter oder das nächste Servlet weiterzuleiten. Andernfalls wird die Anforderung blockiert und kann nicht normal verarbeitet werden.

  • Konfigurieren Sie die Aktionsebene (zwischen Sevlet und Controller) in springmvc. Implementieren Sie die HandlerInterceptor-Schnittstelle, um einen benutzerdefinierten Interceptor zu erstellen. Die spezifischen Schritte lauten wie folgt:

    Erstellen Sie eine Java-Klasse, implementieren Sie die HandlerInterceptor-Schnittstelle und schreiben Sie ihre drei Methoden neu: preHandle(), postHandle() und afterCompletion().
JavaCopy-Code öffentliche Klasse MyInterceptor implementiert HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse Response, Object handler) throws Exception { // Wird aufgerufen, bevor die Controller-Methode ausgeführt wird, bedeutet die Rückgabe von true, dass nachfolgende Interceptor- und Controller-Methoden weiterhin ausgeführt werden bedeutet, die Ausführung nachfolgender Interceptor- und Controller-Methoden zu stoppen. return true; }

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    // 在控制器方法执行之后、视图渲染之前被调用,可以对模型数据进行修改或查看。
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
        Exception ex) throws Exception {
    // 整个请求完成之后被调用,可以用于清理资源等工作。
}

Deklarieren Sie den Interceptor in der Spring MVC-Konfigurationsdatei und geben Sie den Abfangpfad an.

  • xmlKopieren Sie den Code mvc:interceptors 8b647e1a51343ebb13528c2233a5023e

  • In der obigen XML-Konfiguration ist MyInterceptor der Name der benutzerdefinierten Interceptor-Klasse. Durch die Registrierung des Interceptors in der Spring MVC-Konfigurationsdatei werden alle Anforderungen, die den Abfangpfad des Interceptors durchlaufen, abgefangen und entsprechend verarbeitet.

    Es ist zu beachten, dass Sie bei der Implementierung eines Interceptors auswählen können, welche Methoden entsprechend Ihren eigenen Anforderungen neu geschrieben werden müssen, um eine verfeinerte Abfangverarbeitung zu erreichen. Gleichzeitig muss in der preHandle()-Methode ein boolesches Ergebnis zurückgegeben werden, um anzugeben, ob die Ausführung nachfolgender Interceptor- und Controller-Methoden fortgesetzt werden soll. Wenn false zurückgegeben wird, wird die Anforderung gestoppt und die Ausführung wird nicht fortgesetzt.
4. Interviewfragen zu Filtern und Abfangjägern

1 Was ist der Unterschied zwischen Filtern und Abfangjägern?

Filter ist eine Komponente, die im Servlet-Container zum Vorverarbeiten und Filtern von Anforderungen verwendet wird. Sie kann Funktionen wie Filterung, Überprüfung und Komprimierung implementieren. Der Interceptor (Interceptor) ist eine Komponente, die zum Abfangen und Verarbeiten von Anforderungen im Spring MVC-Framework verwendet wird. Er kann Funktionen wie Berechtigungsüberprüfung, Protokollierung und Ausnahmebehandlung implementieren. Filter werden im Servlet-Container ausgeführt, während Interceptoren im Spring MVC-Framework ausgeführt werden.

2. Wie ist die Ausführungsreihenfolge von Filtern und Interceptoren?

In Java-Webanwendungen wird die Ausführungsreihenfolge von Filtern und Interceptoren durch die Reihenfolge bestimmt, in der sie in der Konfigurationsdatei deklariert werden. Im Allgemeinen wird der zuerst deklarierte Filter oder Interceptor zuerst ausgeführt, und der später deklarierte Filter oder Interceptor wird später ausgeführt.

3. Welche Funktionen haben Filter und Abfangjäger?

Sowohl Filter als auch Interceptoren können Anfragen verarbeiten und steuern und eine Reihe von Funktionen implementieren, wie z. B. Anfragefilterung, Authentifizierung, Datenverschlüsselung, Protokollierung usw. Filter werden hauptsächlich zum Vorverarbeiten und Filtern von Anforderungen verwendet, während Interceptoren hauptsächlich zum Abfangen und Verarbeiten von Anforderungen vor oder nach der Ausführung der Controller-Methode verwendet werden.

4. Welche Einsatzszenarien gibt es für Filter und Abfangjäger?

Sowohl Filter als auch Interceptoren können zur Implementierung einer Reihe von Kontroll- und Verwaltungsfunktionen verwendet werden. Filter können beispielsweise in Szenarien wie Identitätsauthentifizierung, Datenverschlüsselung und -entschlüsselung, Anforderungsfilterung und -komprimierung verwendet werden, während Interceptoren in Szenarien wie Berechtigungsüberprüfung, Protokollierung und Ausnahmebehandlung verwendet werden können.

5. Wie verwende ich Filter und Interceptors in Java-Webanwendungen?

Um in Java-Webanwendungen Filter und Interceptors verwenden zu können, müssen diese in der Konfigurationsdatei deklariert und registriert werden. Bei Filtern kann dies durch Hinzufügen der Tags „and“ in der Datei „web.xml“ erfolgen; bei Interceptoren kann dies durch Hinzufügen des Tags „mvc:interceptors“ in der Spring MVC-Konfigurationsdatei erfolgen. Gleichzeitig müssen Sie beim Deklarieren und Registrieren von Filtern und Interceptoren auch deren Ausführungsreihenfolge und Abfangpfad sowie andere zugehörige Informationen angeben.

Das obige ist der detaillierte Inhalt vonWie implementiert man Java-Filter und Interceptors?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen