A partir HandlerIntercepterde javadoc :
HandlerInterceptoré basicamente semelhante a um Servlet Filter, mas em contraste com o último, ele apenas permite o pré-processamento personalizado com a opção de proibir a execução do próprio manipulador e o pós-processamento personalizado. Os filtros são mais poderosos, por exemplo, eles permitem a troca de objetos de solicitação e resposta que são transmitidos ao longo da cadeia. Observe que um filtro é configurado em web.xml, a
HandlerInterceptorno contexto do aplicativo.
Como uma diretriz básica, tarefas de pré-processamento relacionadas ao manipulador de baixa granularidade são candidatas a HandlerInterceptorimplementações, especialmente código de manipulador comum fatorado e verificações de autorização. Por outro lado, a Filteré adequado para solicitar conteúdo e visualizar manipulação de conteúdo, como formulários multipartes e compactação GZIP. Isso normalmente mostra quando é necessário mapear o filtro para certos tipos de conteúdo (por exemplo, imagens) ou para todas as solicitações.
Com isso dito:
Então, onde está a diferença entre Interceptor#postHandle()e
Filter#doFilter()?
postHandleserá chamado após a invocação do método do manipulador, mas antes da exibição ser renderizada. Assim, você pode adicionar mais objetos de modelo para a vista, mas você pode não mudar o HttpServletResponseuma vez que já está comprometido.
doFilteré muito mais versátil que o postHandle. Você pode alterar a solicitação ou resposta e passá-la para a cadeia ou até mesmo bloquear o processamento da solicitação.
Além disso, nos métodos preHandlee postHandle, você tem acesso ao HandlerMethodque processou a solicitação. Portanto, você pode adicionar lógica de pré / pós-processamento com base no próprio manipulador. Por exemplo, você pode adicionar uma lógica para métodos manipuladores que possuem algumas anotações.
Qual é a prática recomendada em que casos de uso deve ser usado?
Como o documento disse, as tarefas de pré-processamento relacionadas ao manipulador de baixa granularidade são candidatas a HandlerInterceptorimplementações, especialmente o código do manipulador comum fatorado e as verificações de autorização. Por outro lado, a Filteré adequado para solicitar conteúdo e visualizar manipulação de conteúdo, como formulários multipartes e compactação GZIP. Isso normalmente mostra quando é necessário mapear o filtro para certos tipos de conteúdo (por exemplo, imagens) ou para todas as solicitações.