Filter

Filter

  • Filter:一个实现了特殊接口(Filter)的Java类. 实现对请求资源(jsp,servlet,html,)的过滤的功能.

  • 过滤器是一个运行在服务器的程序, 优先于请求资源(Servlet或者jsp,html)之前执行. 过滤器是javaweb技术中最为实用的技术.

  • 过滤器必须是在所有的请求到来之前,就先准备好

应用场景: 登录权限检查, 解决网站乱码, 过滤敏感字符 …

Filter生命周期

  1. 服务器启动的时候, 会调用init()方法进行初始化【调用一次】
  2. 任何一次匹配请求都会调用doFilter()方法进行过滤【路径相匹配】
  3. 服务器正常关闭或者项目从服务器移除, 调用destory()方法进行销毁【调用一次】

Filter和Servlet生命周期区别?

注意: 默认情况下,Servlet是来了第一次请求的时候 调用init()方法进行初始化.我们可以在Servlet里面设置启动项.让servlet在部署下项目的时候就执行init方法。

拦截方式

  • DispatcherType.REQUEST
    默认值,过滤从浏览器发送过来的请求和重定向 不过滤转发
  • DispatcherType.FORWARD
    只过滤转发过来的请求

一般情况下, 请求转发我们不会过滤的. 转发属于服务器内部的行为. 直接使用默认值的情况偏多

过滤器链

就是多个过滤器过滤同一个请求,这样就会有排队过滤的情况

为了更好的处理|过滤请求,有时候想给某些请求,添加多个过滤的功能,比如: 解决中文乱码的功能, 敏感词汇过滤的功能…

当一个filter收到请求的时候,调用chain.doFilter 放行才可以访问下一个匹配的filter, 若
当前的filter是最后一个filter,调用chain.doFilter才能访问目标资源(servlet | 静态资源)

过滤器链执行顺序

  • 配置文件: 谁先配置filter-mapping 谁先执行
  • 注解方式: 按照Filter的首字母顺序 eg: AFilter BFilter A在B的前面, AFilter先执行

非法字符过滤

  • init()
    • 读取非法字符文件, 把非法字符串存到List 【只需要读取一次, init()就执行一次】
  • doFilter()方法
    • 强转两个参数
    • 获得用户发布的言论
    • 遍历List集合, 判断用户发布的言论里面是否包含非法字符
      • 如果包含, 拦截, 响应 ‘发布的言论包含非法字符,重新发布’
      • 不包含, 放行

注意事项

  • 读取非法字符文件 指定utf-8
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值