java web开发(十一)过滤器

news/2025/2/25 8:09:54

为什么80%的码农都做不了架构师?>>>   hot3.png

一 生命周期

方法声明功能描述
init(FilterConfig filterConfig)用于初始化过滤器,整个生命周期中只被调用一次
doFilter(ServletRequest req, ServletResponse resp)拦截处理方法
destroy()卸载Filter之前调用,整个生命周期中只被调用一次

二 实现

1.实现Filter接口,重写生命周期方法。

2.doFilter中放行资源

filterChain.doFilter(servletRequest, servletResponse);

3.web.xml中配置<filter>和<fileter-mapping>

<filter>
    <filter-name>Filter01</filter-name>
    <filter-class>com.cary.demo.Filter01</filter-class>
</filter>
<filter-mapping>
    <filter-name>Filter01</filter-name>
    <url-pattern>/filter01</url-pattern>
</filter-mapping>

三 请求拦截

1.可以在<url-pattern>中使用“*”通配符拦截所有的请求访问。

2.<dispatcher>拦截

  • REQUEST:如果资源是通过RequestDispatcher的incloude()和forward()访问的,那么该过滤器不会被拦截,否则被拦截
  • INCLUCE:通过RequestDispatcher的include访问的,会调用该拦截器,被拦截。
  • FORWARD:通过RequestDispatcher的forward访问的,会调用该拦截器,被拦截。
  • ERROR:如果是通过声明是异常机制访问的,会调用该拦截器,被拦截。

四 Filter链

Filter01:

public class Filter01 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Filter01");
        filterChain.doFilter(servletRequest, servletResponse);//将请求传递给Filter02
    }
}

Filter02:

public class Filter02 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Filter02");
    }
}

web.xml:

<filter>
    <filter-name>Filter01</filter-name>
    <filter-class>com.cary.demo.Filter01</filter-class>
</filter>
<filter-mapping>
    <filter-name>Filter01</filter-name>
    <url-pattern>/filter01</url-pattern>
</filter-mapping>

<filter>
    <filter-name>Filter02</filter-name>
    <filter-class>com.cary.demo.Filter01</filter-class>
</filter>
<filter-mapping>
    <filter-name>Filter02</filter-name>
    <url-pattern>/filter02</url-pattern>
</filter-mapping>

注:Filter的拦截顺序与它们在web.xml文件总<filter-mapping>元素的映射顺序一致。上例中Filter01在前,因此Filter01先拦截请求。

五 FilterConfig

方法声明功能描述 
String  getFilterName()返回web.xml中Filter设置的名称
ServletContext getServletContext()返回ServletContext对象

String getInitParameter(String name)

获取web.xml中<init-param>中设置的参数值
Enumeration getInitParameterNames()返回<init-param>Enumeration集合,包含所有初始化参数的名称

 

转载于:https://my.oschina.net/kun123/blog/913804


http://www.niftyadmin.cn/n/712811.html

相关文章

《机器学习实战》读书笔记5:朴素贝叶斯分类器的原理

贝叶斯定理 我们知道&#xff1a;P(A∩B)P(A|B)P(B)P(B|A)P(A)所以有&#xff1a;P(A|B)P(B|A)P(A)P(B)这就是贝叶斯定理。贝叶斯分类器的原理 假如我们要为一个疾病诊断系统构建一个贝叶斯分类器。首先&#xff0c;我们有如下训练集&#xff1a; 职业症状疾病矿工咳嗽肺炎矿…

个人版整理APP测试流程

2016.1.5 我的笔记 一 、APP测试基本流程 1.1 测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c;一般测试时间为两三周&#xff08;即15个工作日&#xff09;&#xff0c;根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1…

ipsec协议_IPSec在防火墙USG5500上的运用

IPSec(Internet Protocol Security)是一整套的解决方案&#xff0c;一个协议包。IPsec主要由以下协议组成&#xff1a;一、认证头(AH)&#xff0c;为IP数据报提供无连接数据完整性、消息认证以及防重放攻击保护&#xff1b;二、封装安全载荷(ESP)&#xff0c;提供机密性、数据源…

荔枝集团战队斩获 2023 Amazon DeepRacer自动驾驶赛车企业总决赛冠军

6月27日&#xff0c;2023 Amazon DeepRacer自动驾驶赛车企业总决赛在上海决出了最终结果&#xff0c;荔枝集团“状元红”战队与Cisco、德勤管理咨询、北京辛诺创新、神州泰岳、敦煌网等12支队伍的竞逐中&#xff0c;在两轮比赛中成绩遥遥领先&#xff0c;最终斩获桂冠。而今年年…

微服务配置中心是干啥的_微服务之配置中心ConfigKeeper

在微服务架构中&#xff0c;配置中心是必不可少的基础服务。ConfigKeeper已开源&#xff0c;本文将深度分析配置中心的核心内容&#xff0c;错过「Spring Cloud中国社区北京沙龙-2018.10.28 」的同学将从本篇文章中收获现场的分享内容。背景微服务容器架构后&#xff0c;为了方…

Myeclipse10.0版下载

链接&#xff1a;http://pan.baidu.com/s/1kVl1kSf 密码&#xff1a;p6yr 主界面框图 转载于:https://www.cnblogs.com/veis/p/6938457.html

CodeForces 445A-DZY Loves Chessboard(字符串处理)

题目描述&#xff1a; DZY loves chessboard, and he enjoys playing with it. He has a chessboard of n n n rows and m m m columns. Some cells of the chessboard are bad, others are good. For every good cell, DZY wants to put a chessman on it. Each chessman is e…

java清空字符串_Java——JVM篇干货系列(一)

1 基本概念&#xff1a;JVM 是可运行 Java 代码的假想计算机 &#xff0c;包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收&#xff0c;堆 和 一个存储方法域。JVM 是运行在操作系统之上的&#xff0c;它与硬件没有直接 的交互。2 运行过程&#xff1a;我们都知道 Ja…