作者: 桌前明月
0、序言
0.0、demo版本說明
軟體版本開發工具Spring Tool Suite (STS)jdk版本1.8.0_144springboot版本2.0.5.RELEASE
0.1、場景介紹
springboot 中沒有 web.xml ;我們無法按照原來定義filter 方式使用,我們的自定義 filter;我們需要編寫聲明 @Configuration 注解的類,并将我們自定義的filter 通過 FilterRegistrationBean 執行個體添加到springboot 的過濾鍊中。
1、自定義filter
這裡的 filter 除了無需在web.xml中配置其他的和javaWeb中的Filter 沒有什麼差別。在這裡我們定義一個攔截通路url的filter 來攔截通路項目的URI 和URL
package cn.lijunkui.filters;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class UrlFilter implements Filter { private Logger log = LoggerFactory.getLogger(UrlFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; String requestURI = httpServletRequest.getRequestURI(); StringBuffer requestURL = httpServletRequest.getRequestURL(); log.info("requestURI:" +requestURI+" "+"requestURL:"+requestURL); chain.doFilter(httpServletRequest, response); } @Override public void destroy() { }}
2、定義springboot 過濾鍊配置類
定義@Configuration 注解的類 并将自定義的filter 通過 FilterRegistrationBean 執行個體對象加入到過濾鍊中。
FilterRegistrationBean 中方法介紹:設定我們自定義攔截器示例對象:registration.setFilter(new UrlFilter())
設定攔截的:registration.setUrlPatterns(urlList)
設定攔截器的名稱:registration.setName("UrlFilter")
設定攔截器攔截順序:registration.setOrder(1)
具體代碼如下:
package cn.lijunkui.config;import java.util.ArrayList;import java.util.List;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import cn.lijunkui.filters.UrlFilter;@Configurationpublic class FilterConfig { @Bean public FilterRegistrationBean filterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new UrlFilter()); List urlList = new ArrayList(); urlList.add("/*"); registration.setUrlPatterns(urlList); registration.setName("UrlFilter"); registration.setOrder(1); return registration; }}
3、進行測試
啟動spirngboot 項目 通過遊覽器通路我們的服務:
demo總結:springboot中自定義filter
1、我們需要編寫Filter類實作Filter接口;同時定義 Filter的配置類。
2、配置類需要聲明 @Configuration 注解,同時定義聲明@Bean的方法。
3、然後将自定義filter添加到FilterRegistrationBean 中即可。
項目源碼位址:
https://github.com/zhuoqianmingyue/springbootexamples