A partir HandlerIntercepter
de 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
HandlerInterceptor
no contexto do aplicativo.
Como uma diretriz básica, tarefas de pré-processamento relacionadas ao manipulador de baixa granularidade são candidatas a HandlerInterceptor
implementaçõ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()
?
postHandle
será 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 HttpServletResponse
uma 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 preHandle
e postHandle
, você tem acesso ao HandlerMethod
que 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 HandlerInterceptor
implementaçõ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.