Servlet規范中定義的一種組件,用于在請求進入Servlet之前或響應返回客戶端之前執行一些操作。它依賴于Servlet容器,幾乎可以對任何請求進行過濾,隨著Web應用的啟動而啟動,Web應用停止則Filter銷毀。
通過實現javax.servlet.Filter,對請求進行過濾攔截,進而做統一處理。最后將請求交給Servlet進行處理并生成得到響應。得到響應以后,Filter可以對響應再次進行處理。
圖片
如進行過濾低俗文字,危險字符,日志記錄、權限驗證、字符編碼處理等等。如防XSS攻擊的XSSFilter過濾器。
public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化操作 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 在請求處理之前執行的操作 // 可以對請求進行修改、驗證等操作 chain.doFilter(request, response); // 在響應返回客戶端之前執行的操作 // 可以對響應進行修改、記錄日志等操作 } @Override public void destroy() { // 銷毀操作 }}
在Spring Boot中,我們可以通過配置類或使用@WebFilter注解來注冊Filter。
@Configurationpublic class FilterConfig { @Bean public FilterRegistrationBean<MyFilter> myFilter() { FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new MyFilter()); registrationBean.addUrlPatterns("/api/*"); // 設置過濾的路徑 return registrationBean; }}
Interceptor是Spring框架提供的一種攔截器,與Servlet無關,它依賴于Web框架,用于在Controller方法執行前后進行處理。與Filter不同,Interceptor是Spring MVC框架特有的組件。它可以將一些共有的行為動作給通用化、標準化,進而讓代碼更加簡潔,可擴展性更高。
圖片
基于實現HandlerInterceptor接口,并重寫它的方法。它有如下方法:
Interceptor主要用于處理與Controller相關的邏輯,比如權限驗證、日志記錄、統一異常處理等。
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在Controller方法執行前執行的操作 // 返回true表示繼續執行,返回false表示中斷執行 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在Controller方法執行后、視圖渲染前執行的操作 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在整個請求完成后執行的操作 }}
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/api/**") // 設置攔截的路徑 .excludePathPatterns("/api/public/**"); // 設置排除的路徑 }}
本文鏈接:http://www.tebozhan.com/showinfo-26-88715-0.html徹底明白Filter與Interceptor
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: C#委托:實現靈活的方法調用
下一篇: 還是結構體指針寫的代碼看著舒服