filter过滤器实现方式有两种:
-
过滤器实现方式一
第一步:创建MyFilter类实现Filter接口package com.example.lambda.annotation; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * @author: WZ * @create: 2022-10-19 09:04 * @description: 过滤器实现方式1 **/ @Component @Slf4j public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info("---------------【{}】创建...", this.getClass().getSimpleName()); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info("---------------【{}】执行...", this.getClass().getSimpleName()); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { log.info("---------------【{}】销毁", this.getClass().getSimpleName()); } }
第二步:创建MyFilterConfig配置类 向spring容器注册filter
package com.example.lambda.annotation; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.Resource; import javax.servlet.Filter; /** * @author: WZ * @create: 2022-10-19 09:15 * @description: 向spring容器注册filter **/ @Configuration public class MyFilterConfig { @Resource private MyFilter myFilter; @Bean public FilterRegistrationBean testFilterRegistration() { //创建要向指定的ServletRegistrationBeans注册的新FilterRegistrationBean实例 FilterRegistrationBean registration = new FilterRegistrationBean(myFilter); //添加过滤器将针对的URL模式 registration.addUrlPatterns("/test/*"); //设置注册bean的名称 registration.setName("myFilter"); //设置注册bean的顺序 值越大越靠后执行 registration.setOrder(1); return registration; } }
-
过滤器实现方式二
通过@WebFilter注解实现package com.example.lambda.annotation; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * @author: WZ * @create: 2022-10-19 09:04 * @description: 过滤器实现方式1 **/ //@Component 无需添加此注解,在启动类添加@ServletComponentScan注解后,会自动将带有@WebFilter的注解进行注入! @WebFilter(urlPatterns = "/test/*", filterName = "myFilter") //需要在SpringBootApplication上添加 //@ServletComponentScan Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码 @Order(1) //指定过滤器的执行顺序, @Slf4j public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info("---------------【{}】创建...", this.getClass().getSimpleName()); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info("---------------【{}】执行...", this.getClass().getSimpleName()); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { log.info("---------------【{}】销毁", this.getClass().getSimpleName()); } }