Filter基础及应用

12 篇文章 1 订阅
9 篇文章 0 订阅

1. Filter 简介

Servlet 中的 Filter, 翻译成中文是过滤器, 实现了javax.servlet.Filter接口的服务器端程序,

主要的用途 :

  • 自动登录
  • 统一设置编码格式
  • 访问权限控制
  • 敏感字符过滤等

2. Filter 基本使用

1. 实现 Filter 接口的自定义类,2. 使用注解 @WebFilter 对filter定义
2. 选择 new ==> create new Filter ==> 生成如下代码:
3. 创建完成后默认代码,可以看到,CharsetFilter实现了Filter接口,实现了3个方法。
3 个方法的作用已经在注释中写清楚了。
@WebFilter(filterName = "Filter01")
public class Filter01 implements Filter {

    public void destroy() {
        System.out.println("已摧毁 Filter...");
    }
    
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("Filter 被执行了...");
        chain.doFilter(req, resp);
    }
    
    public void init(FilterConfig config) throws ServletException {
        System.out.println("初始化Filter...");
    }
}
- 1. destory 方法,销毁时调用
- 2. 过滤方法 doFilter, 调用时执行, 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理       
     chain.doFilter(req, resp);//交给下一个过滤器或servlet处理
  3. init 方法, 执行时创建 Filter 对象   

2.1 还有一种方法,需要配置 xml 文件,但是这里不推荐,和 servlet xml配置完全一样, 因为比较繁琐,了解即可!

<!-- 解决乱码的问题 -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    // 下面可以写多个url-pattern, /*  匹配所有路径
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. Filter 拦截配置项

  • 以指定资源匹配。例如" /index.jsp "
  • 以目录匹配。例如" /servlet/ * "
  • 以后缀名匹配,例如 "* .jsp "
  • 通配符,拦截所有web资源。" / * "

initParams:
配置初始化参数,跟Servlet配置一样

例如:

initParams = {
        @WebInitParam(name = "key",value = "value")
}

dispatcherTypes:

配置拦截的类型,可配置多个。默认为DispatcherType.REQUEST**

例如:

dispatcherTypes = {DispatcherType.ASYNC,DispatcherType.ERROR}

其中 DispatcherType 个枚举类型,有下面5个值

FORWARD,	//转发的
INCLUDE,	//包含在页面的
REQUEST,	//请求的
ASYNC,	//异步的
ERROR;	//出错的

4. 多个Filter的执行顺序

在我们的请求到达Servle之间是可以经过多个Filter的,一般来说,建议Filter之间不要有关联,各自处理各自的逻辑即可。这样,我们也无需关心执行顺序问题。
如果一定要确保执行顺序,就要对配置进行修改了,执行顺序如下:

1. 在web.xml中,filter执行顺序跟<filter-mapping>的顺序有关,先声明的先执行
2. 使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行
3. 如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值