为了账号安全,请及时绑定邮箱和手机立即绑定

聊聊java过滤器是怎样使用的?

标签:
Java

过滤器的工作原理及生命周期

图片描述

图片描述
init():这是过滤器的初始化方法,web容器创建过滤器实例后将调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数。

doFilter():这个方法完成实际的过滤操作。这个地方是过滤器的核心方法。当用户请求访问与过滤器关联的URL时,Web容器将先调用过滤器的doFilter方法。FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发,重定向将请求转发到其他资源。

destroy():web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源。(大多数情况用不到)
图片描述

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>FilterTest</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>com.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

过滤器链
过滤器1 ,过滤器2
若他们的url-pattern不一样,则是互不干扰的两个过滤器
若他们的url-parttern一样,则形成了过滤器链

用户请求——》过滤器1——》过滤器2——》过滤器3——》web资源
服务器会按照web.xml中过滤器定义的先后顺序组装成一条链

过滤器链执行过程
图片描述
eg:
start----doFilter--FirstFilter
start---doFilter--SecondFilter
index.jsp
end---doFilter--SecondFilter
end------doFilter—FirstFilter

过滤器的分类
Servlet2.5

  1. Request:用户直接访问页面时,web容器将会调用过滤器
  2. Forward:目标资源是通过RequestDispatcher的forward访问时,该过滤器将被调用
  3. Include:目标资源是通过RequestDispatcher的include访问时,该过滤器将被调用
  4. Error:目标资源时通过声明式异常处理机制调用时,过滤器将被调用
    Servlet3.0
    ASYNC:支持异步处理

@WebFilter
@WebFilter用于将一个类声明为过滤器,该注解会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。
图片描述

图片描述

过滤器在实际项目中的应用场景

  1. 对用户请求进行统一认证
  2. 编码转换
  3. 对用户发送的数据进行过滤替换
  4. 转换图像格式
  5. 对响应的内容进行压缩
点击查看更多内容
12人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
6
获赞与收藏
91

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消