Java Web知识点之——Filter过滤器

文章目录

前言

一、Filter是什么?

二、Filter工作的流程图

 三、Filter的简单应用过程

1.编写我们自己的Filter类

2.编写登录的Servlet

3.配置使用我们的过滤器

总结


前言

本文用于记录自己在学习Java Web开发中对于Filter过滤器的理解和体会,过滤器的存在可以为我们的Web应用提供安全性和稳定性。我们可以通过过滤器实现过滤非法请求,以及拦截未拥有访问权限的请求等等。Filter过滤器在Spring Secuitry 和Shiro等安全框架都有广泛的应用。本篇文章记录的是原生过滤器的定义和使用。

一、Filter是什么?

Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

二、Filter工作的流程图

 

 三、Filter的简单应用过程

1.编写我们自己的Filter类

创建一个Maven项目,然后在pom.xml文件中导入servlet,jsp ,el表达式与MySQL所需的依赖后,编写自定义Filter类,需要实现Filter接口,并且重写三个方法。

init方法对应的是filter初始化的时候调用的方法,而destroy是Filter在销毁的时候调用的方法。

这里我们只需要用到doFilter方法,意思是在Filter实现过滤和拦截作用时调用的方法。

这里我设计的这个Filter是用于检验用户是否登录,即浏览器的请求中Session是否有用户的信息,若为空,则被拦截并且重定向到错误界面,当Session有信息时,通过filterChain进行回调,并且携带上本次请求的request和response,即跳转到成功登陆后的界面。

public class SysFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       HttpServletRequest  request = (HttpServletRequest) servletRequest;
       HttpServletResponse  response = (HttpServletResponse) servletResponse;
       if(request.getSession().getAttribute(Constant.USER_SESSION)==null){
           response.sendRedirect("/error.jsp");
       }
        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {

    }
}

2.编写登录的Servlet

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取前端请求的参数
        String username = req.getParameter("username");
        if (username=="admin") {//登陆成功
            req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
            resp.sendRedirect("/sys/success.jsp");
        } else {//登陆失败
            resp.sendRedirect("/error.jsp");
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

}

3.配置使用我们的过滤器

首先我们要把我们写好的登录Servlet注册进Web.xml文件中,Filter过滤器拥有它独特的<filter>标签,这里我们url地址映射中写到/sys/*是指 会对浏览器请求栏中/sys/下所有的路径进行检测过滤。

<servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.he.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/servlet/login</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>SysFilter</filter-name>
        <filter-class>com.he.filter.SysFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SysFilter</filter-name>
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>


总结

Filter过滤器是我们在Web应用开发中必不可少的一环,在日后我们常用的各种安全框架中都会有大量的过滤器让我们去使用配置,所以了解基本的过滤器工作的原理,以及浏览器请求是怎么通过过滤器重新回到正确界面的是我们需要重点学习的部分。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值