java的filter方法(过滤器的功能)

一.什么是Filter?Filter译为过滤器。 由于Servlet规范是开放的,借助于公众与开源社区的力量,Servlet规范越来越科学,功能也越来越强大。2000年,Sun公司在Servlet2.3规范中添加了Filter功能,并在Servlet2.4中对Filter进行了细节上的补充。二.运行原理:当客户端向服务器端发送一个请求时,如果有对应的过滤器进行拦截,过滤器可以改变请求的内容、或者重…

大家好,又见面了,我是你们的朋友全栈君。

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

二.运行原理:

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

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

java的filter方法(过滤器的功能)


三.实现例子:

比如用户访问服务器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,添加如下节点:

  <filter>
    <filter-name>AdminFilter</filter-name>
    <filter-class>TestFilter</filter-class>   
  </filter>
  <filter-mapping>
  <filter-name>AdminFilter</filter-name>
   <url-pattern>/admin/*</url-pattern>
  </filter-mapping>

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

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

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
       这里是管理员页面!
</body>
</html>

然后启动tomcat访问admin.jsp

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

然后会显示如下:  

java的filter方法(过滤器的功能)

因为代码中if(false)的判断,所以filter并不生效

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

java的filter方法(过滤器的功能)

Filter生效了,返回错误信息:无管理员权限访问!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128969.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大白话图解:什么是 CDN[通俗易懂]

    大白话图解:什么是 CDN[通俗易懂]  618电商节、双十一购物狂欢节,到底是什么在支撑数以万计的秒杀活动?这就不得不提一直隐姓埋名的CDN了,注意不是CSDN,而是CDN,CDN,CDN!  那到底CDN是什么鬼,这还要从西天取经说起……  1300年前,唐僧师徒取经要跋涉十万八千里,历经九九八十一难,一路打怪升级,最终才能修成正果,悟空加冕“斗战胜佛”。  1300年后,西游互联网已经开通,雷音寺…

    2025年6月9日
    6
  • 修复QQ群图片不显示的方法:qq图片一直转圈圈,qq群聊天图片显示不出来[通俗易懂]

    修复QQ群图片不显示的方法:qq图片一直转圈圈,qq群聊天图片显示不出来[通俗易懂]我的电脑原来是可以显示群内图片的,发现qq里的图片过多,担心占空间不足,用qq设置里的文件清理,执行立即清理后,只清除了7天前的群聊图片,里面的还有很多大于7天前的群聊图片没有清理掉,我用手工,把我qq个人图片,D:\MyDocuments\TencentFiles\10151569\Image这个文件下的文件全部清空了,过后qq里的好友聊天和群聊图片,都不能显示了,卸掉qq后重新安装qq…

    2022年8月10日
    9
  • 项目随笔

    项目随笔

    2021年8月17日
    51
  • SQL语句增加字段、修改字段、修改类型、修改默认值[通俗易懂]

    SQL语句增加字段、修改字段、修改类型、修改默认值[通俗易懂]–一、修改字段默认值altertable表名dropconstraint约束名字——说明:删除表的字段的原有约束altertable表名addconstraint约束名字DEFAULT默认值for字段名称——-说明:添加一个表的字段的约束并指定默认值–二、修改字段名:altertable表名renamecolumn…

    2022年5月21日
    55
  • 阿里云ubuntu镜像下载_ubuntu最小镜像

    阿里云ubuntu镜像下载_ubuntu最小镜像备份原来的源$mv/etc/apt/sources.list/etc/apt/sources.list.bak$vim/etc/apt/sources.list添加如下内容debhttp://mirrors.aliyun.com/ubuntu/hirsutemainrestricteduniversemultiversedebhttp://mirrors.aliyun.com/ubuntu/hirsute-securitymainrestricteduniver

    2022年10月14日
    5
  • C++使用CreateMutex

    C++使用CreateMutex一 定义 HANDLECreate LPSECURITY ATTRIBUTESlp 指向安全属性的指针 BOOLbInitial 初始化互斥对象的所有者 LPCTSTRlpNam 指向互斥对象名的指针 第一个参数是一个指向 SECURITY ATTRIBUTES 结构体的指针 一般的情况下 可以是 nullptr 第二个参数类型为 BOOL 表示互斥锁创建出来后是否被当前线程持有 第三个参数类型为字符串 con

    2025年9月14日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号