javaweb--filter过滤器

Filter过滤器

功能:
1、用来拦截传入的请求和传出的响应
2、修改或者以某种方式处理正在客户端和服务端直接交换的数据流

如何使用?

与使用Servlet相似,Filter是Java Web提供的一个接口,开发者只需要自定义一个类并且实现该接口即可

package com.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author 毕晶
 * @date 2022/9/22 19:57
 */
public class CharacterFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("UTF-8");
        //过滤会中断请求,所以要使用filterChain.doFilter把请求再次发出去,即到了TestServlet这边,请求一直都是同一个请求
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }

}

web.xml中

    <filter>
        <filter-name>character</filter-name>
        <filter-class>com.filter.CharacterFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>character</filter-name>
        <url-pattern>/test</url-pattern>
        <url-pattern>/login</url-pattern>
        <!--        可以一直加-->
    </filter-mapping>

也可以通过注解的方式来配置

@WebFilter("/checkLogin")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

Filter的生命周期

当Tomcat启动时,通过反射机制调用doFilter的无参构造器创建实例化对象,同时调用init方法实现初始化,foFilter方法调用多次,当Tomcat服务关闭时,调用destroy来销毁Filter对象

无参构造器:只调用一次,当Tomcat启动时调用(Filter一定要在xml中进行配置)

init方法:只调用一次,当Filter的实例化对象创建完成之后调用

doFilter方法:调用多次,访问Filter的业务逻辑都写在其中

destroy:只调用一次,Tomcat关闭的时候调用

实际开发中Filter的使用场景

  1. 处理中文乱码
  2. 屏蔽敏感词
  3. 控制资源的访问权限
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值