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

来源:互联网 发布:python最优化 例子 编辑:程序博客网 时间:2024/06/05 17:19

1.目录结构

这里写图片描述

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.多个过滤器执行的顺序问题

目录结构:
这里写图片描述

过滤器代码:

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指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) */@WebFilter(filterName = "myFilter", urlPatterns = "/*")//指定过滤器的执行顺序,值越小越靠后执行@Order(1)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("执行过滤操作。。。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声明过滤器的名称,可选 * 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) */@WebFilter(filterName = "myFilter2", urlPatterns = "/*")//指定过滤器的执行顺序,值越大越先执行@Order(2)public class MyFilter2 implements Filter {    /**     * 执行过滤操作     */    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        chain.doFilter(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的值越大,过滤器越先执行

阅读全文
0 0
原创粉丝点击