Gönderen HandlerIntercepter
bireyin javadoc :
HandlerInterceptor
temelde bir Servlet'e benzer Filter
, ancak ikincisinin aksine, işleyicinin kendisinin yürütülmesini engelleme seçeneği ile özel ön işlemeye ve özel son işlemeye izin verir. Filtreler daha güçlüdür, örneğin zincirden teslim edilen istek ve yanıt nesnelerinin değiş tokuşuna izin verirler. Uygulama bağlamında web.xml
,
bir filtrenin yapılandırıldığını unutmayın HandlerInterceptor
.
Temel bir kılavuz olarak, işleyiciyle ilgili ayrıntılı ön işleme görevleri HandlerInterceptor
, özellikle faktörlü ortak işleyici kodu ve yetkilendirme kontrolleri olmak üzere uygulamalar için adaydır . Öte yandan, a Filter
, çok parçalı formlar ve GZIP sıkıştırması gibi istek içeriği ve görüntüleme içeriği işleme için çok uygundur. Bu tipik olarak, filtreyi belirli içerik türleriyle (ör. Resimler) veya tüm isteklerle eşleştirmenin gerekli olduğu zamanı gösterir.
Bununla birlikte:
Öyleyse Interceptor#postHandle()
ve
arasındaki fark nerede Filter#doFilter()
?
postHandle
işleyici yöntemi çağrıldıktan sonra ancak görünüm oluşturulmadan önce çağrılacaktır. Yani, görünümüne daha modeli nesneleri ekleyebilirsiniz ancak olabilir değil değiştirmek HttpServletResponse
zaten taahhüt beri.
doFilter
çok daha çok yönlüdür postHandle
. İsteği veya yanıtı değiştirebilir ve zincire iletebilir veya hatta istek işlemeyi engelleyebilirsiniz.
Ayrıca, preHandle
ve postHandle
yöntemlerinde, HandlerMethod
isteği işleyenlere erişiminiz vardır . Böylece, işleyicinin kendisine bağlı olarak ön / son işleme mantığı ekleyebilirsiniz. Örneğin, bazı ek açıklamalara sahip işleyici yöntemleri için bir mantık ekleyebilirsiniz.
Hangi kullanım durumlarında kullanılması gereken en iyi uygulama nedir?
Belgenin dediği gibi, işleyiciyle ilgili ayrıntılı ön işleme görevleri HandlerInterceptor
, özellikle faktörlü ortak işleyici kodu ve yetkilendirme kontrolleri olmak üzere uygulamalar için adaylardır . Öte yandan, a Filter
, çok parçalı formlar ve GZIP sıkıştırması gibi istek içeriği ve görüntüleme içeriği işleme için çok uygundur. Bu tipik olarak, filtreyi belirli içerik türleriyle (ör. Resimler) veya tüm isteklerle eşleştirmenin gerekli olduğu zamanı gösterir.