• Servelet组件之一的filter过滤器


    什么是filter

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

    filter优点

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

    使用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两个选项

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

    Filter请求和响应

    Filter是可以转换请求或响应的标头和内容 (或两者) 的对象。Filter与 web 组件的区别在于, Filter本身通常不会创建响应。相反, Filter提供了可 "附加" 到任何类型的 web 资源的功能。因此, Filter不应依赖于它充当其Filter的 web 资源。这样, 它可以由多种类型的 web 资源组成。

    Filter可以执行的主要任务如下所示。

    • 查询请求并采取相应的操作。

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

    • 修改请求标头和数据。您可以通过提供请求的自定义版本来执行此操作。

    • 修改响应标头和数据。您可以通过提供响应的自定义版本来执行此操作。

    • 与外部资源交互。

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

  • 相关阅读:
    array_intersect、array_intersect_key、array_intersect_assoc、array_intersect_ukey、array_intersect_uassoc 的用法
    array_diff、array_diff_key、array_diff_ukey、array_diff_assoc、array_diff_uassoc 的用法
    Cannot set headers after they are sent to the client
    zepto+mui开发中的tap事件重复执行
    64位Win7中7zip无法关联文件的问题
    两种好用的清除浮动的小技巧(clearfix hack)
    apache2.4.35 403 forbidden 解决办法
    IETester for IE11, IE10, IE9, IE8, IE7 IE 6 and IE5.5 on Windows 8 desktop, Windows 7, Vista and XP
    清除display:inline-block元素换行符间隙font-size:0;
    环形文字 + css3制作图形 + animation无限正反旋转的一个小demo
  • 原文地址:https://www.cnblogs.com/jasonwan/p/10735858.html
Copyright © 2020-2023  润新知