Da HandlerIntercepter's javadoc :
HandlerInterceptorè sostanzialmente simile a un servlet Filter, ma a differenza di quest'ultimo consente solo la pre-elaborazione personalizzata con la possibilità di vietare l'esecuzione del gestore stesso e la post-elaborazione personalizzata. I filtri sono più potenti, ad esempio consentono di scambiare gli oggetti richiesta e risposta che vengono trasmessi lungo la catena. Si noti che un filtro viene configurato in web.xml, a
HandlerInterceptornel contesto dell'applicazione.
Come linea guida di base, le attività di pre-elaborazione relative al gestore a grana fine sono candidati per le HandlerInterceptorimplementazioni, in particolare il codice del gestore comune scomposto e i controlli di autorizzazione. D'altra parte, a Filterè adatto per la gestione del contenuto della richiesta e della visualizzazione, come i moduli multipart e la compressione GZIP. Questo in genere mostra quando è necessario mappare il filtro a determinati tipi di contenuto (ad es. Immagini) oa tutte le richieste.
Detto questo:
Allora dov'è la differenza tra Interceptor#postHandle()e
Filter#doFilter()?
postHandleverrà chiamato dopo l'invocazione del metodo del gestore ma prima che la vista venga renderizzata. Quindi, è possibile aggiungere altri oggetti del modello alla vista, ma si può non cambiare il HttpServletResponsedal momento che è già impegnata.
doFilterè molto più versatile del postHandle. È possibile modificare la richiesta o la risposta e passarla alla catena o addirittura bloccare l'elaborazione della richiesta.
Inoltre, in preHandlee postHandlemetodi, hai accesso a quello HandlerMethodche ha elaborato la richiesta. Quindi, puoi aggiungere la logica di pre / post-elaborazione basata sul gestore stesso. Ad esempio, è possibile aggiungere una logica per i metodi del gestore che hanno alcune annotazioni.
Qual è la migliore pratica in quali casi d'uso dovrebbe essere utilizzato?
Come ha detto il documento, le attività di pre-elaborazione relative al gestore a grana fine sono candidati per le HandlerInterceptorimplementazioni, in particolare il codice del gestore comune scomposto e i controlli di autorizzazione. D'altra parte, a Filterè adatto per la gestione del contenuto della richiesta e della visualizzazione, come i moduli multipart e la compressione GZIP. Questo in genere mostra quando è necessario mappare il filtro a determinati tipi di contenuto (ad es. Immagini) o a tutte le richieste.