SpringBoot自定义Filter
传统Web工程定时Filter方式:
1:编写自定义Filter
/** * @description:编写自定义Filter * @date: 2019-06-26 */ public class TestFilter implements Filter { /** * 方法用于初始化,项目启动的时候就会被调用,而且只会被调用一次 * @date: 2019-06-26 */ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("=========>初始化Filter<============"); } /** * 方法用户处理过滤逻辑,只要满足过滤条件就会被执行;在doFilter方法中必须执行FilterChain对象的doFilter方法,否则前端过来的请求就不会进入到控制层 * @date: 2019-06-26 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("=========>执行Filter过滤器<============"); // 将请求转发到目的地 chain.doFilter(request, response); } /** * 方法用于销毁,项目关闭的时候会被调用,而且只会被调用一次 * @date: 2019-06-26 */ @Override public void destroy() { System.out.println("=========>销毁Filter<============"); } }
2:配置web.xml文件
<filter> <filter-name>filter</filter-name> <filter-class>com.test.filter.TestFilter</filter-class> <init-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>contentType</param-name> <param-value>text/html;charset=UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>filter</filter-name> <!-- * 代表截获所有的请求 或指定请求/test.do /xxx.do --> <url-pattern>/*</url-pattern> </filter-mapping>
SpringBoot自定义注解:
1:注解式注入
1.1 编写自定义Filter并且添加注解
/** * @description:自定义注解,并且添加@WebFilter注解 * @date: 2019-06-26 */ @WebFilter(urlPatterns = "/*") public class TestFilter implements Filter { /** * 方法用于初始化,项目启动的时候就会被调用,而且只会被调用一次 * @date: 2019-06-26 */ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("=========>初始化Filter<============"); } /** * 方法用户处理过滤逻辑,只要满足过滤条件就会被执行;在doFilter方法中必须执行FilterChain对象的doFilter方法,否则前端过来的请求就不会进入到控制层 * @date: 2019-06-26 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("=========>执行Filter过滤器<============"); chain.doFilter(request, response); } /** * 方法用于销毁,项目关闭的时候会被调用,而且只会被调用一次 * @date: 2019-06-26 */ @Override public void destroy() { System.out.println("=========>销毁Filter<============"); } }
1.2 启动类增加Filter注入注解
@EnableEurekaClient @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) //指定Serlvet和Filter扫描位置如果只有不指定包名也可以会直接扫描,但是为了代码的可读性最好加上,明确Servlet和Filter位置 @ServletComponentScan(basePackages = {"com.micro.picture.tiger.component.servlet", "com.micro.picture.tiger.component.filter"}) public class BatchApplicationStart { public static void main(String[] args) { SpringApplication.run(BatchApplicationStart.class, args); } }
2:代码方式注入(推荐使用此种方式,亦可使用此方法引入三方Filter)
2.1 编写自定义Filter,不与要注解,只要实现Filter接口即可
/** * @description: 实现Filter的测试过滤器-无注解 * @date: 2019-06-26 */ public class TestFilter implements Filter { /** * 方法用于初始化,项目启动的时候就会被调用,而且只会被调用一次 * @date: 2019-06-26 */ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("=========>初始化Filter<============"); } /** * 方法用户处理过滤逻辑,只要满足过滤条件就会被执行;在doFilter方法中必须执行FilterChain对象的doFilter方法,否则前端过来的请求就不会进入到控制层 * @date: 2019-06-26 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("=========>执行Filter过滤器-start<============"); chain.doFilter(request, response); System.out.println("=========>执行Filter过滤器-end<============"); } /** * 方法用于销毁,项目关闭的时候会被调用,而且只会被调用一次 * @date: 2019-06-26 */ @Override public void destroy() { System.out.println("=========>销毁Filter<============"); } }
2.2 配置类中增加过滤器配置代码
/** * @description: Servlet和Filter配置类 * @date: 2019-06-26 */ @Configuration public class BatchConfig { /** * 过滤器 * @date: 2019-06-26 */ @Bean public FilterRegistrationBean filterRegistration(){ // 实例化过滤器注册对象,并且注册自定义过滤器 FilterRegistrationBean filterRegistration = new FilterRegistrationBean(new TestFilter()); // 设置自定义过滤器的过滤路径 filterRegistration.addUrlPatterns("/*"); // 设置过滤器排除路径 filterRegistration.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,"); // 设置过滤器名称 filterRegistration.setName("TestFilter"); // 设置过滤器顺序 filterRegistration.setOrder(2006); return filterRegistration; } /** * Servlet * @date: 2019-06-26 */ @Bean public ServletRegistrationBean servletRegistration(){ return new ServletRegistrationBean(new TestServlet(), "/testServlet/*"); } }