Spring MVC Handler Interceptors Beispiel

Beispiel für Spring MVC-Handler-Interceptors

Mit Spring MVC können Sie Webanforderungen über Handler-Interceptors abfangen. Der Handler-Interceptor muss dieHandlerInterceptor-Schnittstelle implementieren, die drei Methoden enthält:

  1. preHandle() - Wird vor der Handlerausführung aufgerufen und gibt den booleschen Wert "true" zurück: Fortsetzung der Handlerausführungskette; "Falsch", stoppen Sie die Ausführungskette und geben Sie sie zurück.

  2. postHandle() - Nach der Ausführung des Handlers aufgerufen, können Sie das ModelAndView-Objekt bearbeiten, bevor Sie es zur Ansichtsseite rendern.

  3. afterCompletion() - Wird aufgerufen, nachdem die vollständige Anforderung abgeschlossen wurde. Selten verwendet, kann keinen Anwendungsfall finden.

In diesem Tutorial erstellen Sie zwei Handler-Interceptors, um die Verwendung derHandlerInterceptor zu zeigen.

  1. ExecuteTimeInterceptor - Fangen Sie die Webanforderung ab und protokollieren Sie die Ausführungszeit des Controllers.

  2. MaintenanceInterceptor - Fangen Sie die Webanforderung ab, prüfen Sie, ob die aktuelle Zeit zwischen der Wartungszeit liegt. Wenn ja, leiten Sie sie zur Wartungsseite um.

Note
Es wird empfohlen,HandlerInterceptorAdapter für die praktischen Standardimplementierungen zu erweitern.

1. ExecuteTimeInterceptor

Fangen Sie die Ausführung vor und nach dem Controller ab, protokollieren Sie den Beginn und das Ende der Ausführungszeit und speichern Sie sie für eine spätere Anzeige in modelAndView des vorhandenen abgefangenen Controllers.

Datei: ExecuteTimeInterceptor.java

package com.example.common.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class ExecuteTimeInterceptor extends HandlerInterceptorAdapter{

    private static final Logger logger = Logger.getLogger(ExecuteTimeInterceptor.class);

    //before the actual handler will be executed
    public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler)
        throws Exception {

        long startTime = System.currentTimeMillis();
        request.setAttribute("startTime", startTime);

        return true;
    }

    //after the handler is executed
    public void postHandle(
        HttpServletRequest request, HttpServletResponse response,
        Object handler, ModelAndView modelAndView)
        throws Exception {

        long startTime = (Long)request.getAttribute("startTime");

        long endTime = System.currentTimeMillis();

        long executeTime = endTime - startTime;

        //modified the exisitng modelAndView
        modelAndView.addObject("executeTime",executeTime);

        //log it
        if(logger.isDebugEnabled()){
           logger.debug("[" + handler + "] executeTime : " + executeTime + "ms");
        }
    }
}

2. Wartungsinterceptor

Überprüfen Sie vor der Ausführung des Controllers, ob die aktuelle Zeit zwischen der Wartungszeit liegt. Wenn ja, leiten Sie sie auf die Wartungsseite um. andernfalls setzen Sie die Ausführungskette fort.

Datei: MaintenanceInterceptor.java

package com.example.common.interceptor;

import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class MaintenanceInterceptor extends HandlerInterceptorAdapter{

    private int maintenanceStartTime;
    private int maintenanceEndTime;
    private String maintenanceMapping;

    public void setMaintenanceMapping(String maintenanceMapping) {
        this.maintenanceMapping = maintenanceMapping;
    }

    public void setMaintenanceStartTime(int maintenanceStartTime) {
        this.maintenanceStartTime = maintenanceStartTime;
    }

    public void setMaintenanceEndTime(int maintenanceEndTime) {
        this.maintenanceEndTime = maintenanceEndTime;
    }

    //before the actual handler will be executed
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler)
        throws Exception {

        Calendar cal = Calendar.getInstance();
        int hour = cal.get(cal.HOUR_OF_DAY);

        if (hour >= maintenanceStartTime && hour <= maintenanceEndTime) {
            //maintenance time, send to maintenance page
            response.sendRedirect(maintenanceMapping);
            return false;
        } else {
            return true;
        }

    }
}

3. Aktivieren Sie den Handler-Interceptor

Um dies zu aktivieren, fügen Sie Ihre Handler-Interceptor-Klasse in die Eigenschaft "interceptors" der Handlerzuordnung ein.



    
        
            
                welcomeController
            
        
        
            
                
                
            
        
    

    
        
            
                
            
        
    

    
    

    

    
        
        
        
    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

Quellcode herunterladen

Laden Sie es herunter -http: //www.example.com/wp-content/uploads/2010/07/SpringMVC-HandlerInterceptor-Example.zip [SpringMVC-HandlerInterceptor-Example.zip] (8 KB)