温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在springboot中实现一个@WebFilter注解过滤器

发布时间:2021-04-16 17:26:46 来源:亿速云 阅读:236 作者:Leah 栏目:编程语言

这篇文章给大家介绍怎么在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 = "/*") @Slf4j 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源码:

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @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 --- doFilter
2 --- 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");   } }

注册过滤器

@Configuration public 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;   } }

多个过滤器注册

再添加一个过滤器:

@Slf4j 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");   } }

修改配置类:

@Configuration public 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注解过滤器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI