springboot @WebFilter注解過濾器的實現
@WebFilter注解過濾器
@WebFilter加在過濾器的注解上使用
import lombok.extern.slf4j.Slf4j;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.annotation.WebFilter;import java.io.IOException;@WebFilter(urlPatterns = '/*')@Slf4jpublic class WebFilterTest implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info('WebFilterTest --- init'); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info('WebFilterTest --- doFilter'); filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { log.info('WebFilterTest --- destroy'); }}
@WebFilter源碼:
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface WebFilter { String description() default ''; /**Filter顯示名*/ String displayName() default ''; /**配置參數*/ WebInitParam[] initParams() default {}; /**Filter名稱*/ String filterName() default ''; String smallIcon() default ''; String largeIcon() default ''; /**指定對哪些Servlet進行過濾*/ String[] servletNames() default {}; /**指定攔截的路徑*/ String[] value() default {}; /**指定攔截的路徑*/ String[] urlPatterns() default {}; /**指定Filter對哪種方式的請求進行過濾*/ DispatcherType[] dispatcherTypes() default {DispatcherType.REQUEST}; /**指定Filter是否支持異步模式*/ boolean asyncSupported() default false;}
在springBoot的啟動類中加入注解:
import org.springframework.boot.web.servlet.ServletComponentScan;@ServletComponentScan
多個@WebFilter注解的過濾器可以配合@Order()注解實現執行過濾的順序
import org.springframework.core.annotation.Order;@WebFilter(urlPatterns = '/*')@Slf4j@Order(1)public class WebFilterTest implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info('WebFilterTest --- init'); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info('WebFilterTest --- doFilter'); filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { log.info('WebFilterTest --- destroy'); }}
@WebFilter(urlPatterns = '/*')@Slf4j@Order(2)public class WebFilterTest2 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info('2---WebFilterTest2 --- init'); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info('2 --- WebFilterTest2 --- doFilter'); filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { log.info('WebFilterTest2 --- destroy'); }}
執行結果
WebFilterTest --- doFilter2 --- WebFilterTest2 --- doFilter
不使用注解的方式使用過濾器
創建過濾器類
public class WebFilterTest implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info('WebFilterTest --- init'); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info('WebFilterTest --- doFilter'); filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { log.info('WebFilterTest --- destroy'); }}
注冊過濾器
@Configurationpublic class FilterConfig { @Bean public WebFilterTest webFilterTest(){ return new WebFilterTest(); } @Bean public FilterRegistrationBean filterRegist(){ FilterRegistrationBean frBean = new FilterRegistrationBean(); frBean.setFilter(webFilterTest()); frBean.setOrder(1); frBean.addUrlPatterns('/*'); return frBean; }}
多個過濾器注冊
再添加一個過濾器:
@Slf4jpublic class WebFilterTest2 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info('2---WebFilterTest2 --- init'); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info('2 --- WebFilterTest2 --- doFilter'); filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { log.info('WebFilterTest2 --- destroy'); }}
修改配置類:
@Configurationpublic class FilterConfig { @Bean public WebFilterTest webFilterTest(){ return new WebFilterTest(); } @Bean public WebFilterTest2 webFilterTest2(){ return new WebFilterTest2(); } @Bean public FilterRegistrationBean filterRegist(){ FilterRegistrationBean frBean = new FilterRegistrationBean(); frBean.setFilter(webFilterTest()); frBean.setOrder(1); frBean.addUrlPatterns('/*'); return frBean; } @Bean public FilterRegistrationBean filterRegist2(){ FilterRegistrationBean frBean = new FilterRegistrationBean(); frBean.setFilter(webFilterTest2()); frBean.setOrder(2); frBean.addUrlPatterns('/*'); return frBean; }}
到此這篇關于springboot @WebFilter注解過濾器的實現的文章就介紹到這了,更多相關springboot @WebFilter注解過濾器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: