Filter过滤器及其作用

1.什么是过滤器?

过滤器,顾名思义就是起到过滤筛选作用的一种事物,只不过相较于现实生活中的过滤器,这里的过滤器过滤的对象是客户端访问的web资源,也可以理解为一种预处理手段,对资源进行拦截后,将其中我们认为的杂质(用户自己定义的)过滤,符合条件的放行,不符合的则拦截下来

2.filter配置

  •  web.xml配置

<filter>
     <filter-name>filter1</filter-name>//定义的filter名字
     <filter-class>work.filter.Filter1</filter-class>//filter类名(加上包名)
 </filter>
 ​
 <filter-mapping>
     <filter-name>filter1</filter-name>
     <url-pattern>/*</url-pattern>//拦截的路径(一般使用/*,当然也可以根据自己的需要来自行配置)
 </filter-mapping>
  • 使用注解配置

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

也可以简写为

@WebFilter("/*")

2.filter过滤器生命周期及其与生命周期相关的方法


Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法

destory():代表是filter销毁方法 当filter对象销毁时执行该方法

doFilter:代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法

init:代表filter对象初始化方法 filter对象创建时执行

public class Filterone implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

过滤器可以组成一个过滤器链,链中的每个过滤器都可以负责特定的操作和任务,客户端访问服务器的请求和响应在这些过滤器链之间传递,Filter接口用于调用过滤器中的一系列过滤器

3.过滤器的实例应用

3.1.解决乱码问题

配置过滤器在客户发送请求到达Servlet之前进行拦截后通过拦截器直接解决中文乱码问题

实现步骤:

  • 定义拦截器实现Filter接口
  • 配置拦截器(推荐使用注解配置,简单快捷)
  • 在doFilter()中设计乱码的解决代码
@WebFilter("/*")
public class FilterEnocding implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
       req.setCharacterEncoding("utf-8");
       resp.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

3.2.敏感词过滤

  • 对请求的数据进行敏感词汇过滤
  • 过滤敏感词替换为*

3.3.登录验证

  • 访问资源,验证是否已经登录
  • 如果已经登录直接放行
  • 如果未登录就挑战到登陆页面

登录selevet判断登录

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("name");
        String password = req.getParameter("pwd");
        method me = new method();
        userinfo u = me.login(username,password);
        if (u!=null){
            req.getSession().setAttribute("u",u);
            resp.sendRedirect("show");
//            req.getRequestDispatcher("show").forward(req,resp);
        }else {
            resp.sendRedirect("orr.jsp");
        }

    }

进入主页面查询展示信息selevet,代码不再详细展示

        req.getRequestDispatcher("/fil/show.jsp").forward(req,resp);

过滤器配置以及过滤器内容

 

@WebFilter("/fil/*")//过滤器配置路径
public class Filterlogin implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)resp;
        userinfo u = (userinfo) req.getAttribute("u");
        if(u!=null){
            chain.doFilter(req, resp);//登录成功则继续向下执行进入展示页面
        }else {
            response.sendRedirect("../index.jsp");//失败则返回登录页面继续登录
        }

    }

    public void init(FilterConfig config) throws ServletException {

    }
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值