Servelet组件之一的filter过滤器

什么是filter

Filter,过滤器,顾名思义,便是对数据等的过滤,预处理过程。为何要引入过滤器呢?在日常访问网站的时候,有时候发一些敏感的信息,发出后显示时 就会将敏感信息用*等字符替代,这就是用过滤器对信息进行了处理。这只是一个简单的例子,固然,过滤器那么强大,它的功能也不可能局限于此,它不只能预处 理数据,只要是发送过来的请求它都是能够预处理的,同时,它还能够对服务器返回的响应进行预处理,这样,大大减轻了服务器的压力。例如,实现URL级别的 权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。web

filter优势

过滤器是可插拔的,咱们不须要某个过滤器时,直接删掉不会影响程序的运行。
一个过滤器不依赖于另外一个资源
维护少,容易维护api

使用filter

过滤做用,对从客户端向服务器端发送的请求进行过滤,也能够对服务器端返回的响应进行处理。它使用户能够改变一个request和修改一个 response.。Filter 不是一个servlet,它不能产生一个response,可是它可以在一个request到达servlet以前预处理request,也能够在 response离开servlet时处理response。换句话说,filter实际上是客户端与servlet中间的一个传递者,而且它能够对要传递 的东西进行修改。服务器

    // 用户没有登陆
    if (session.getAttribute("sessionUser") == null) {
        // 1.不须要登陆的请求不拦截
        String resource = uri.substring(uri.lastIndexOf("/") + 1);
        // System.out.println(uri.substring(uri.lastIndexOf("/") + 1));
        // 不须要登陆就能够访问的资源
        if ("login.jsp".equals(resource) || "login".equals(resource)) {
            chain.doFilter(request, response);
        } else if (uri.contains("/api/get") || uri.contains("/api/post")) {
            chain.doFilter(request, response);
        }
        // 不合法的请求 用户没有登陆 却访问了一个须要登陆之后才能够访问的系统资源 这时候重定向到登陆页面 让用户登陆
        else {
            // 重定向到系统登陆页面
            response.sendRedirect("login.jsp");
        }
    }
    // 用户已经登陆了 继续下面的请求
    else {
        chain.doFilter(request, response);
    }

ilter配置
经过配置web.xml文件:咱们须要配置filter和filter-mapping两个选项session

myFilter com.gzx.filter.MyFilter myFilter ...app

Filter请求和响应jsp

Filter是能够转换请求或响应的标头和内容 (或二者) 的对象。Filter与 web 组件的区别在于, Filter自己一般不会建立响应。相反, Filter提供了可 "附加" 到任何类型的 web 资源的功能。所以, Filter不该依赖于它充当其Filter的 web 资源。这样, 它能够由多种类型的 web 资源组成。post

Filter能够执行的主要任务以下所示。网站

  • 查询请求并采起相应的操做。加密

  • 阻止请求和响应对经过任何进一步。spa

  • 修改请求标头和数据。您能够经过提供请求的自定义版原本执行此操做。

  • 修改响应标头和数据。您能够经过提供响应的自定义版原本执行此操做。

  • 与外部资源交互。

Filter的应用包括身份验证、日志记录、图像转换、数据压缩、加密、令牌流、XML 转换等。

相关文章
相关标签/搜索