Z HandlerIntercepter„s javadoc :
HandlerInterceptorjest zasadniczo podobny do serwletu Filter, ale w przeciwieństwie do tego drugiego, umożliwia po prostu niestandardowe przetwarzanie wstępne z opcją zakazania wykonywania samego modułu obsługi i niestandardowego przetwarzania końcowego. Filtry mają większe możliwości, na przykład umożliwiają wymianę obiektów żądań i odpowiedzi, które są przekazywane w łańcuchu. Zauważ, że filtr jest konfigurowany w web.xml, a
HandlerInterceptorw kontekście aplikacji.
Zgodnie z podstawową wytyczną, szczegółowe zadania przetwarzania wstępnego związane z procedurą obsługi są kandydatami do HandlerInterceptorimplementacji, w szczególności z uwzględnieniem wspólnego kodu procedury obsługi i kontroli autoryzacji. Z drugiej strony, a Filterjest dobrze dostosowany do treści żądań i obsługi treści, takich jak formularze wieloczęściowe i kompresja GZIP. Zwykle pojawia się, gdy trzeba odwzorować filtr na określone typy treści (np. Obrazy) lub na wszystkie żądania.
Biorąc to pod uwagę:
Więc gdzie jest różnica między Interceptor#postHandle()i
Filter#doFilter()?
postHandlezostanie wywołana po wywołaniu metody obsługi, ale przed renderowaniem widoku. Tak, można dodać więcej obiektów modelu do widoku, ale może nie zmienić HttpServletResponse, ponieważ już popełnione.
doFilterjest znacznie bardziej wszechstronny niż postHandle. Możesz zmienić żądanie lub odpowiedź i przekazać je do łańcucha lub nawet zablokować przetwarzanie żądania.
Ponadto w programie preHandlei postHandleMethods masz dostęp do tego, HandlerMethodktóry przetworzył żądanie. Możesz więc dodać logikę przetwarzania wstępnego / końcowego w oparciu o samą procedurę obsługi. Na przykład można dodać logikę dla metod obsługi, które mają pewne adnotacje.
Jaka jest najlepsza praktyka, w jakich przypadkach należy jej używać?
Jak wspomniano w dokumencie, drobnoziarniste zadania przetwarzania wstępnego związane z obsługą są kandydatami do HandlerInterceptorimplementacji, w szczególności z uwzględnieniem wspólnego kodu modułu obsługi i kontroli autoryzacji. Z drugiej strony, a Filterjest dobrze dostosowany do treści żądań i obsługi treści, takich jak formularze wieloczęściowe i kompresja GZIP. Zwykle pojawia się, gdy trzeba odwzorować filtr na określone typy treści (np. Obrazy) lub na wszystkie żądania.