Filter,过滤器,顾名思义,便是对数据等的过滤,预处理过程。为何要引入过滤器呢?在日常访问网站的时候,有时候发一些敏感的信息,发出后显示时 就会将敏感信息用*等字符替代,这就是用过滤器对信息进行了处理。这只是一个简单的例子,固然,过滤器那么强大,它的功能也不可能局限于此,它不只能预处 理数据,只要是发送过来的请求它都是能够预处理的,同时,它还能够对服务器返回的响应进行预处理,这样,大大减轻了服务器的压力。例如,实现URL级别的 权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。web
过滤器是可插拔的,咱们不须要某个过滤器时,直接删掉不会影响程序的运行。
一个过滤器不依赖于另外一个资源
维护少,容易维护api
过滤做用,对从客户端向服务器端发送的请求进行过滤,也能够对服务器端返回的响应进行处理。它使用户能够改变一个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 转换等。