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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ReLU激活函数:简单之美

    ReLU激活函数:简单之美导语在深度神经网络中,通常使用一种叫修正线性单元(Rectifiedlinearunit,ReLU)作为神经元的激活函数。

    2022年6月15日
  • DSP FPGA_fpga oddr

    DSP FPGA_fpga oddr序曲:今年(2021年)7月4日至24日,我指导电子信息工程专业18级的12位同学进行小学期的课程实践。多年以来,我一直想鼓励同学们基于国产的FPGA进行设计和实践,今年终于进行了大胆的尝试。为了课程实践顺利进行,我和12位同学提前了近2个月进行准备。从5月17日(周一)早晨8:00第一次讨论会开始,我和12位同学每周都坚持查阅、学习国内FPGA的资料,每周开讨论会研讨学习进展。研讨会辗转于海空学院会议室、控制学院会议室、新图书馆研讨室……由于同学们课多且分散,同时我的其他…

    2022年10月9日
  • 高手入门STM32总结+学习步骤

    高手入门STM32总结+学习步骤一、入门总结1.1为什么要把时间花在“犹豫”上?每当我们在入门之前(ARM是这样,DSP也一样),总会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。大家可能是从51单片机过来的,回想一…

    2022年9月4日
  • 求两个对角向上、列索引是偶数的元件和。

    求两个对角向上、列索引是偶数的元件和。

    2022年1月10日
  • hdu 1286

    hdu 1286

    2021年8月26日
  • 系统蓝屏代码

    系统蓝屏代码

    2021年9月10日

发表回复

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

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