Comment enregistrer un filtre de servlet dans Spring MVC

Comment enregistrer un filtre de servlet dans Spring MVC

En un mot, un filtre de servlet vous permet d'intercepter les demandes et les réponses sur votre application Web. Cet article vous montre comment enregistrer un filtre de servlet dans Spring XML et JavaConfig.

1. Filtre de servlet

Examinez le filtre personnalisé suivant, il détectera toutes les exceptions et redirigera vers une page d'erreur.

package com.example.form.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ErrorHandleFilter implements Filter {

    @Override
    public void destroy() {
        // ...
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //
    }

    @Override
    public void doFilter(ServletRequest request,
               ServletResponse response, FilterChain chain)
        throws IOException, ServletException {

        try {
            chain.doFilter(request, response);
        } catch (Exception ex) {
            request.setAttribute("errorMessage", ex);
            request.getRequestDispatcher("/WEB-INF/views/jsp/error.jsp")
                               .forward(request, response);
        }

    }

}

2. XML de printemps

Dans la configuration Spring MVC + XML, vous pouvez enregistrer les filtres viaweb.xml

web.xml

    
        errorHandlerFilter
        com.example.form.web.ErrorHandleFilter
    
    
        errorHandlerFilter
        /*
    

3. Spring JavaConfig

Dans Spring MVC + JavaConfig + noweb.xml file, vous pouvez enregistrer les filtres via la classe d'initialisation.

MyWebInitializer.java

package com.example.form.config.servlet3;

import javax.servlet.Filter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import com.example.form.config.SpringRootConfig;
import com.example.form.config.SpringWebConfig;
import com.example.form.web.ErrorHandleFilter;

public class MyWebInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    //...

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[]{new ErrorHandleFilter()};
    }
}