后端开发 \ SpringBoot \ SpringBoot学习-(十一)SpringBoot过滤器

SpringBoot学习-(十一)SpringBoot过滤器

总点击132
简介:两种加入springioc容器的方法 在过滤器上面添加@Component注解 在springboot启动类上面添加@ServletComponentScan注解(Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,

两种加入spring ioc容器的方法

在过滤器上面添加@Component注解

在springboot启动类上面添加@ServletComponentScan注解(Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码)

1.目录结构

SpringBoot学习-(十一)SpringBoot过滤器

2.编写过滤器

package com.ahut.filter;

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.annotation.WebFilter;

import org.springframework.stereotype.Component;

/**

*

* @ClassName: MyFilter

* @Description:自定义过滤器

* @author cheng

* @date 2017年9月26日 上午9:19:38

*/

// 加入spring ioc容器

@Component

/*

* @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器

* 属性filterName声明过滤器的名称,可选

* 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)

*/

@WebFilter(filterName = "myFilter",urlPatterns = "/*")

public class MyFilter implements Filter {

/**

* 执行过滤操作

*/

@Override

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

throws IOException,ServletException {

chain.doFilter(request,response);

System.out.println("执行过滤操作。。。");

}

/**

* 过滤器初始化

*/

@Override

public void init(FilterConfig config) throws ServletException {

System.out.println("过滤器初始化。。。");

}

/**

* 过滤器销毁

*/

@Override

public void destroy() {

System.out.println("过滤器销毁。。。");

}

}

注意:过滤器在服务器启动时初始化,服务器关闭时销毁!!!

3.多个过滤器执行的顺序问题

目录结构:


SpringBoot学习-(十一)SpringBoot过滤器

过滤器代码:

package com.ahut.filter;

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.annotation.WebFilter;

import org.springframework.core.annotation.Order;

import org.springframework.stereotype.Component;

/**

*

* @ClassName: MyFilter

* @Description:自定义过滤器

* @author cheng

* @date 2017年9月26日 上午9:19:38

*/

// 加入spring ioc容器

@Component

/*

* @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器

* 属性filterName声明过滤器的名称,urlPatterns = "/*")

//指定过滤器的执行顺序,值越小越靠后执行

@Order(1)

public class MyFilter implements Filter {

/**

* 执行过滤操作

*/

@Override

public void doFilter(ServletRequest request,response);

System.out.println("执行过滤操作。。。111");

}

/**

* 过滤器初始化

*/

@Override

public void init(FilterConfig config) throws ServletException {

System.out.println("过滤器初始化。。。111");

}

/**

* 过滤器销毁

*/

@Override

public void destroy() {

System.out.println("过滤器销毁。。。111");

}

}

package com.ahut.filter;

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.annotation.WebFilter;

import org.springframework.core.annotation.Order;

import org.springframework.stereotype.Component;

/**

*

* @ClassName: MyFilter2

* @Description:自定义过滤器

* @author cheng

* @date 2017年9月26日 上午9:19:38

*/

// 加入spring ioc容器

@Component

/*

* @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器

* 属性filterName声明过滤器的名称,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)

*/

@WebFilter(filterName = "myFilter2",值越大越先执行

@Order(2)

public class MyFilter2 implements Filter {

/**

* 执行过滤操作

*/

@Override

public void doFilter(ServletRequest request,response);

System.out.println("执行过滤操作。。。222");

}

/**

* 过滤器初始化

*/

@Override

public void init(FilterConfig config) throws ServletException {

System.out.println("过滤器初始化。。。222");

}

/**

* 过滤器销毁

*/

@Override

public void destroy() {

System.out.println("过滤器销毁。。。222");

}

}

执行结果:

过滤器初始化。。。222

过滤器初始化。。。111

执行过滤操作。。。222

执行过滤操作。。。111

过滤器销毁。。。222

过滤器销毁。。。111

结论:


通过@Order(i)注解可以控制过滤器的执行顺序


i的值越小,过滤器越靠后执行


i的值越大,过滤器越先执行

意见反馈 常见问题 官方微信 返回顶部