Servlet过滤器

Servlet过滤器

功能:可以动态地拦截请求和响应,以对请求和相应进行相应的处理

常见的过滤器类型

  • 身份验证过滤器
  • 数据压缩过滤器
  • 加解密过滤器
  • 日志记录和审核过滤器
  • 字符编码过滤器

配置

过滤器通过Web.xml中的XML标签来声明,然后映射到应用程序中Servlet名称或者URL模式中。当Web容器启动Web应用程序时候,它会为web.xml中声明的每一个过滤器创建一个实例。

<filter>
    <filter-name>login</filter-name>
    <filter-class>com.zeus.filter.LoginFilter</filter-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>admin</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>login</filter-name>
    <url-pattern>/*</url-pattern>
    <!--<servlet-name></servlet-name>-->
</filter-mapping>

在Servlet3.0中,可以通过注解的形式声明一个Filter,而且还能开启异步支持,这是Servlet3.0的亮点之一

@WebFilter(
        urlPatterns = "/*",
        filterName = "login",
        initParams ={
            @WebInitParam(name="username",value = "admin"),
            @WebInitParam(name="password",value = "password")
        },
        asyncSupported = true
)
public class LoginFilter implements Filter {
    private static final String USERMANE = "username";
    private static final String PASSWORD = "password";

    private Set<String> pairs = new ConcurrentSet<>();
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //get init username
        String username = filterConfig.getInitParameter(USERMANE);
        //....
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //do...something
        chain.doFilter(request, response);
        //do..something
    }

    @Override
    public void destroy() {
        //...
    }
}

执行顺序

Filter的执行顺序与web.xml配置文件中的配置顺序一致,写在前面的Filter会比后面的Filter要早运行,一般把Filter配置在所有的Servlet之前

在servlet3.0中,由于Filter不在web.xml中配置了,因此其==按照Filter文件名的字母序==的方式运行,例如Filter1_login.java会比Filter2_encoding.java先运行

所有的Filter组装成一个链式结构对请求和相应进行过滤。假如我们有三个Filter,连接方式为Filter1->Filter2->Filter3,如果一个reuqest刚好满足这三个Filter的过滤条件,那么request和response通过Filter的顺序为:
这里写图片描述

常用方法

  • doFilter:实际的过滤方法,执行完成后调用FilterChain来访问后续过滤器
  • init:Web应用程序启动的时候创建Filter实例,并调用其init方法。开发成员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象
  • destory():servlet容器在销毁过滤器实例前调用该方法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值