filter过滤器学习

一.什么是Filter?
Filter译为过滤器。 由于 Servlet 规范是开放的,借助于公众与开源社区的力量, Servlet 规范越来越科学,功能也越来越强大。 2000 年, Sun 公司在 Servlet2.3 规范中添加了 Filter 功能,并在 Servlet2.4 中对 Filter 进行了细节上的补充。

二.运行原理:

当客户端向服务器端发送一个请求时,如果有对应的过滤器进行拦截,过滤器可以改变请求的内容、或者重新设置请求协议的相关信息等,然后再将请求发送给服务器端的Servlet进行处理。当Servlet对客户端做出响应时,过滤器同样可以进行拦截,将响应内容进行修改或者重新设置后,再响应给客户端浏览器。在上述过程中,客户端与服务器端并不需要知道过滤器的存在。

在一个Web应用程序中,可以部署多个过滤器进行拦截,这些过滤器组成了一个过滤器链。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到服务器端的Servlet。具体执行流程如下:

三.实现例子:

比如用户访问服务器admin文件夹下一个文件,使用filter拦截

在Servlet API中提供了一个Filter接口,实现过滤器只需要实现该接口即可

首先创建一个Filter的java类,TestFilter.java,使其继承于接口Filter

TestFilter.java:

import java.io.IOException;
import javax.servlet.Filter;
public class TestFilter implements Filter
{
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException
{
// TODO Auto-generated method stub
HttpServletResponse htteResp=(HttpServletResponse)arg1;
if(false)
{
htteResp.sendError(400,“无管理员权限访问!”);
return;
}
else
{
arg2.doFilter(arg0,arg1); //不感兴趣,不做任何处理,继续执行代码
}
}
}
然后修改web.xml,添加如下节点:

AdminFilter TestFilter AdminFilter /admin/* 这个意思是当url中有/admin/*这样的格式,将交给TestFilter去过滤

我们在项目中添加一个admin文件夹,然后在其中放一个admin.jsp:

<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here 这里是管理员页面! 然后启动tomcat访问admin.jsp

使用http://localhost:8080/FilterTest/admin/admin.jsp (其中FilterTest是项目名称)

然后会显示如下: 在这里插入图片描述
因为代码中if(false)的判断,所以filter并不生效

将if(false)修改成if(true),在重启tomcat,效果如下:

Filter生效了,返回错误信息:无管理员权限访问!
————————————————
版权声明:本文为CSDN博主「Bird鸟人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wcc27857285/article/details/80298342

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值