玩轉 SpringBoot 2 快速整合 Filter 註解版

前言

本文主要介紹如何在SpringBoot 2 中使用 Filter 的快速搭建教程,閱讀前需要你必須瞭解 Filter 的基礎使用以及如何搭建 SpringBoot 項目。

快速演示操作

第一步: 編寫 Filter 類並且在 Filter 類上聲明 @WebFilter註解,並通過 @WebFilter 註解 urlPatterns 屬性來者是需要攔截訪問路徑。具體代碼如下:

@WebFilter(urlPatterns="/*")
public class URLFilter implements Filter{
	
	private Logger log = LoggerFactory.getLogger(AnnotationFilter.class);

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest httpServeltRequest = (HttpServletRequest)request;
		String requestURI = httpServeltRequest.getRequestURI();
		log.info("訪問地址:"+requestURI);
		chain.doFilter(request, response);
	}

}

第二步:通過 JavaConfig 方式將編寫的 URLFilter 類注入到 Spring 的上下文中。

將我們自定義 URLFilter 傳入到 FilterRegistrationBean的構造中,然後創建 FilterRegistrationBean Bean實例,具體代碼如下:

@Configuration
public class WebApplicationConfig {
	@Bean
	public FilterRegistrationBean<AnnotationFilter>  userServlet(){
		return new FilterRegistrationBean<AnnotationFilter>(new AnnotationFilter());
	}
}

或者在啓動類上聲明 @ServletComponentScan 註解,具體代碼如下:

@SpringBootApplication
@ServletComponentScan
public class SpringbootExamplesApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootExamplesApplication.class, args);
	}
}

JavaConfig 方式 或者聲明@ServletComponentScan 方式選擇一種即可。

src/main/resource static 目錄下hello.html 代碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello spring boot!
</body>
</html>

測試

通過遊覽器訪問 http://localhost:8080/sbe/hello.html 如下圖所示:
在這裏插入圖片描述
後臺日誌輸入信息如下:

2019-10-04 01:25:45.152  INFO 17736 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-10-04 01:25:45.161  INFO 17736 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 9 ms
2019-10-04 01:25:45.192  INFO 17736 --- [nio-8080-exec-1] cn.lijunkui.filter.URLFilter             : 訪問地址:/sbe/hello.html

小結

SpringBoot 中整合 Filter 步驟如下:

  1. 需要在 Filter 上聲明 @WebFilter
  2. 在啓動類上聲明@ServletComponentScan註解或者將
    Filter 通過 FilterRegistrationBean 進行包裝然後通過 JavaConfig
    方式將其注入到Spring上下文中。

代碼示例

我本地環境如下:

SpringBoot Version: 2.1.0.RELEASE
Apache Maven Version: 3.6.0
Java Version: 1.8.0_144
IDEA:Spring Tools Suite (STS)

整合過程如出現問題可以在我的GitHub 倉庫 springbootexamples 中模塊名爲 spring-boot-2.x-annotation-filter 項目中進行對比查看

GitHub:https://github.com/zhuoqianmingyue/springbootexamples

參考文獻

Springboot 系列(六)web 開發之攔截器和三大組件 By 雪漫士兵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章