簡單瞭解SpringBoot過濾器及使用方式
阿新 • • 發佈:2020-04-27
過濾器簡介
- 過濾器依賴Servlet容器,屬於Servlet規範的一部分。
- 在實現上基於Servlet容器的函式回撥,可以對幾乎所有請求進行過濾。
- Filter的生命週期由Servlet容器管理。
過濾器執行流程
過濾器配置使用方式一
@Order(1) // 指定過濾器的執行順序 @WebFilter(filterName = "CostTimeFilter",urlPatterns = "/*",initParams = { @WebInitParam(name = "URL",value = "http://localhost:8080")}) public class CostTimeFilter implements Filter { private String url; /** * filter物件只會建立一次,init方法也只會執行一次。 */ @Override public void init(FilterConfig filterConfig) throws ServletException { this.url = filterConfig.getInitParameter("URL"); System.out.println("Filter init..."); } /** * 主要的業務程式碼編寫方法 */ @Override public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain) throws IOException,ServletException { long start = System.currentTimeMillis(); System.out.println(start + " Filter doFilter before..."); filterChain.doFilter(servletRequest,servletResponse); long end = System.currentTimeMillis(); System.out.println(end + "Filter doFilter after..."); } /** * 在銷燬Filter時自動呼叫。 */ @Override public void destroy() { System.out.println("Filter destroy..."); } }
@RestController public class IndexContoller { @RequestMapping("/query") public void query() throws Exception { System.out.println("IndexContoller query..."); } }
@SpringBootApplication @ServletComponentScan // 掃描 Servlet 相關的元件 public class SpringBootFilterApplication { public static void main(String[] args) { SpringApplication.run(SpringBootFilterApplication.class,args); } }
過濾器配置方式二
public class CostTimeFilter implements Filter { private String url; /** * filter物件只會建立一次,init方法也只會執行一次。 */ @Override public void init(FilterConfig filterConfig) throws ServletException { this.url = filterConfig.getInitParameter("URL"); System.out.println("Filter init..."); } /** * 主要的業務程式碼編寫方法 */ @Override public void doFilter(ServletRequest servletRequest,servletResponse); long end = System.currentTimeMillis(); System.out.println(end + "Filter doFilter after..."); } /** * 在銷燬Filter時自動呼叫。 */ @Override public void destroy() { System.out.println("Filter destroy..."); } }
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean registFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new CostTimeFilter()); registration.addUrlPatterns("/*"); registration.setName("CostTimeFilter"); registration.setOrder(1); return registration; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。