当前位置: 首页 > news >正文

filter的简单介绍

filter,过滤器,顾名思义,就是起到一个对来访者进行筛选过滤的功能

在访问之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。

最常见的有两种

  1. 对用户状态进行筛选,例如,一些页面,没有登录的游客状态,不允许访问,会跳转到登录界面
  2. 对某些资源文件的访问权限进行筛选,没有该文件的下载权限的,拒绝访问

除此之外,也可以对响应进行过滤,拦截或修改响应,设置编码、通过session进行属性过滤。

下面介绍下filter的配置过程:

  1. 创建filter.java

建议新手通过ide直接创建filter,这样会直接在web.xml中添加响应的配置

filter命名一般为filters.XxxFilter.java

创建好filter后,会在.java文件中生成init()、doFilter()、destroy()三个方法,也代表了一个filter的一个执行过程。其中,init()和destroy()均只执行一次,一般的过滤方法都会放在doFilter中。

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {  
      HttpServletRequest request=(HttpServletRequest)req;  
      HttpServletResponse response=(HttpServletResponse)resp;  
      User user = HrmUserVarify.getUser (request , response) ;  
      if("1".equals(user.getUID())){  
           chain.doFilter(req,resp);  
      }  
}  

      2.配置web.xml

  1. 对某个文件进行请求过滤:
  1. <filter>  
        <filter-class>weaver.filters.MyFilter</filter-class>  
        <filter-name>myFilter</filter-name>  
    </filter>  
    <filter-mapping>  
        <filter-name>myFilter</filter-name>  
        <url-pattern>/test/new.jsp</url-pattern>  
    </filter-mapping>  
    
    2. 对某类文件进行过滤
<filter-mapping>  
    <filter-name>ECompatibleFilter</filter-name>  
    <url-pattern>*.css</url-pattern>  
</filter-mapping>  

       3.对某个目录下的所有文件进行配置

  1. <filter-mapping>  
        <filter-name>XssFilter</filter-name>  
        <url-pattern>*.do</url-pattern>  
    </filter-mapping>  

     

      4.对某个请求进行过滤

<filter-mapping>  
    <filter-name>XssFilter</filter-name>  
    <url-pattern>/log/*</url-pattern>  
</filter-mapping>  

经过上边两步,一个filter已经完成配置了,下面是配置多个filter的情况

3.多个filter的情况

一个filter可以配置多个filter-mapping,表示对多种请求进行过滤

例:

在web.xml中,配置两个filter,对同一jsp页面进行拦截过滤

  1. <filter-mapping>  
       <filter-name>myFilter</filter-name>  
       <url-pattern>/test/new.jsp</url-pattern>  
    </filter-mapping>  
    <filter-mapping>  
       <filter-name>myFilter2</filter-name>  
       <url-pattern>/test/new.jsp</url-pattern>  
    </filter-mapping>  

得到如下的结果

  1. <!-- Connected to server -->  
    MyFilter2  init  
    MyFilter  init  
      
    <!-- visit server -->  
    MyFilter  doFilter  
    MyFilter2  doFilter  
      
    <!-- end close the server -->  
    MyFilter2  destroy  
    MyFilter  destroy  
    <!-- Disconnected from server-->  

最后要知道的是,进入filter的先后顺序与mapping的配置的先后顺序有关,而与filter的配置的先后顺序无关

相关文章:

  • 【转】深入理解java异常处理机制
  • 永久激活(破解) IntelliJ IDEA 2018(2018年10月更新)
  • 浏览器关闭后,Session就销毁了吗?
  • bzoj3527: [Zjoi2014]力
  • java中BASE64的编码解码
  • 有关“滑动门”代码研究
  • 泛型的省略
  • 关于WinPE安装操作系统
  • SSO统一身份认证
  • android 入门-工程属性介绍
  • JavaScript prototype 属性
  • 7月20号总结
  • XMLHttpRequest对象
  • Collaborative filtering
  • 2012 蓝桥杯 第39级台阶 【初赛试题】
  • 网络传输文件的问题
  • 08.Android之View事件问题
  • go语言学习初探(一)
  • js ES6 求数组的交集,并集,还有差集
  • linux安装openssl、swoole等扩展的具体步骤
  • MySQL主从复制读写分离及奇怪的问题
  • Node + FFmpeg 实现Canvas动画导出视频
  • PHP 7 修改了什么呢 -- 2
  • React组件设计模式(一)
  • vue的全局变量和全局拦截请求器
  • 机器学习 vs. 深度学习
  • 基于组件的设计工作流与界面抽象
  • 检测对象或数组
  • 利用DataURL技术在网页上显示图片
  • 聊聊directory traversal attack
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 深度学习入门:10门免费线上课程推荐
  • 数据仓库的几种建模方法
  • 小程序01:wepy框架整合iview webapp UI
  • 原生Ajax
  • AI算硅基生命吗,为什么?
  • 大数据全解:定义、价值及挑战
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 容器镜像
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ![CDATA[ ]] 是什么东东
  • # 数论-逆元
  • #pragma once与条件编译
  • #单片机(TB6600驱动42步进电机)
  • (k8s中)docker netty OOM问题记录
  • (ZT)出版业改革:该死的死,该生的生
  • (笔试题)分解质因式
  • (二)windows配置JDK环境
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计大学生兼职系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (转)h264中avc和flv数据的解析
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'