Z HandlerIntercepter
„s javadoc :
HandlerInterceptor
jest 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
HandlerInterceptor
w kontekście aplikacji.
Zgodnie z podstawową wytyczną, szczegółowe zadania przetwarzania wstępnego związane z procedurą obsługi są kandydatami do HandlerInterceptor
implementacji, w szczególności z uwzględnieniem wspólnego kodu procedury obsługi i kontroli autoryzacji. Z drugiej strony, a Filter
jest 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()
?
postHandle
zostanie 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.
doFilter
jest 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 preHandle
i postHandle
Methods masz dostęp do tego, HandlerMethod
któ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 HandlerInterceptor
implementacji, w szczególności z uwzględnieniem wspólnego kodu modułu obsługi i kontroli autoryzacji. Z drugiej strony, a Filter
jest 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.