过滤器过滤器Filter(注意:过滤器,servlet执行的顺序)、FilterChain过滤链

Filter的作用:

当用户的请求到达指定的URL之前,可以借助Filter来改变这些请求的内容;同样地,当响应结果到达客户端之前,可以使用Filter修改输出的内容。

什么是FilterChain(过滤器链):

一个FilterChain包含多个Filter。
在这里插入图片描述

过滤器的工作原理:

在这里插入图片描述

过滤器的部署(web.xml):

<!--配置过滤器-->
<filter>
  <filter-name>checkSessionFilter</filter-name>
  <filter-class>com.DVD.Filter.checkSessionFilter</filter-class>
</filter>
   
<!--映射过滤器-->
<filter-mapping>
   <filter-name>checkSessionFilter</filter-name>//过滤器的名字
<!--“/*”表示拦截所有的请求 -->
   <url-pattern>/admin/*</url-pattern>//过滤器的路径(要过滤哪一个)
</filter-mapping>

具体的实现:

  1. 实现Filter接口:过滤器是一个对象,它根据用户的请求和资源的响应进行过滤.

Filter接口包含以下方法:
在这里插入图片描述

FilterConfig:
在这里插入图片描述

登陆验证:
解决把登录信息放入session会产生大量重复代码的问题

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
	HttpServletRequest req = (HttpServletRequest) request;
	HttpSession session = req.getSession();
	// 从session中获取用户信息
	User user = (User) session.getAttribute("user");
	// 能够从session获取到用户信息,代表用户已经成功登陆过
	if(user==null){
		//如果获取不到用户信息,代表用户没有登陆,则转向到登陆页面
  		  hrsq.getRequestDispatcher("/admin/Login.jsp").forward(hrsq, hsrs);
   	 }
    // 请求向下传递
    chain.doFilter(request, response);
}
其中:
	//设置请求字符集
	request.setCharacterEncoding("GBK");
	//请求向下传递
	chain.doFilter(request, response);

一个页面请求进来,过滤器,servlet执行的顺序:

初始化、销毁什么的不多解释。重点说明,请求的执行顺序:
比如一个form表单,post请求:

  1. 过滤器中的doFilter方法(注意:这个里面只有进行请求向下传递的时候,才能进入下一个页面,否则会一致被拦截)
  2. 进入servlet里面的dopost方法执行完毕(包括跳转页面什么的)
  3. 再回到过滤器的doFilter方法,执行完毕!

FilterChain过滤链:

一个过滤器链(FilterChain),在请求到达请求资源前会依次经过链中的所有过滤器,<filter-mapping>配置在前的Filter先执行,而请求处理完成后,会按照相反的顺序再次经过链中的所有过滤器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值