Servlet的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);
		}

filter配置

通过配置web.xml文件:我们需要配置filter和filter-mapping两个选项

<web-app>
<filter>
    <!--过滤器的名字,这个我们可以自定义名字,但是必须跟下面的mapping中的name一致-->
    <filter-name>myFilter</filter-name>
    <!--filter-class是你所创建的Filter的具体位置,格式如下!!!这里千万不能写错,不然系统找不到你的过滤器-->
    <filter-class>com.gzx.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
    <!--mapping中的filter和上面我们定义的filter-name必须一致-->
    <filter-name>myFilter</filter-name>
    <!--url-pattern是这个过滤器的作用范围,'/*'表示对所有的类生效-->
    <url-pattern>...</url-pattern>
</filter-mapping>
</web-app>


参考文献

猜你喜欢

转载自blog.csdn.net/weixin_43534005/article/details/88697050
今日推荐