Java Web 基础 JSP Filter

admin 2025年1月2日23:37:49评论3 views字数 2208阅读7分21秒阅读模式

Filter 介绍

Servlet 过滤器是可插入的 Web 组件,它允许我们实现 Web 应用程序中的预处理和后期处理逻辑。过滤器支持 servlet 和 JSP 页面的基本请求处理功能,比如日志记录、性能、安全、会话处理、XSLT 转换,等等。
Filter也叫过滤器,通常配置在MVC、Servlet和JSP请求前面
常用于:

  • 后端权限控制

  • 统一的Http请求参数过滤

  • 统一的XSS、SQL注入、SSRF

  • 等等攻击检测的处理

Java Web 基础 JSP Filter

Servlet Filter 的特性:

  • 声明式的:过滤器通过 Web 部署描述符(web.xml)中的 XML 标签来声明。这样允许添加和删除过滤器,而无需改动任何应用程序代码或 JSP 页面。

  • 动态的:过滤器在运行时由 Servlet 容器调用来拦截和处理请求和响应。

  • 灵活的:过滤器在 Web 处理环境中的应用很广泛,涵盖诸如日志记录和安全等许多最公共的辅助任务。过滤器还是灵活的,因为它们可用于对来自客户机的直接调用执行预处理和后期处 理,以及处理在防火墙之后的 Web 组件之间调度的请求。最后,可以将过滤器链接起来以提供必需的功能。

  • 模块化的:通过把应用程序处理逻辑封装到单个类文件中,过滤器从而定义了可容易地从请求/响应链中添加或删除的模块化单元。

  • 可移植的:与 Java 平台的其他许多方面一样,Servlet 过滤器是跨平台和跨容器可移植的,从而进一步支持了 Servler 过滤器的模块化和可重用本质。

  • 可重用的:归功于过滤器实现类的模块化设计,以及声明式的过滤器配置方式,过滤器可以容易地跨越不同的项目和应用程序使用。

  • 透明的:在请求/响应链中包括过滤器,这种设计是为了补充(而不是以任何方式替代)servlet 或 JSP 页面提供的核心处理。因而,过滤器可以根据需要添加或删除,而不会破坏 servlet 或 JSP 页面。

filter 方法

init():这个方法在容器实例化过滤器时被调用,它主要设计用于使过滤器为处理做准备。该方法接受一个 FilterConfig 类型的对象作为输入。

doFilter(): 与 servlet 拥有一个 service() 方法(这个方法又调用 doPost() 或者 doGet())来处理请求一样,过滤器拥有单个用于处理请求和响应的方法——doFilter()。这个方法接受三个输入参数:一个 ServletRequest、response 和一个 FilterChain 对象。

destroy():正如您想像的那样,这个方法执行任何清理操作,这些操作可能需要在自动垃圾收集之前进行。展示了一个非常简单的过滤器,它跟踪满足一个客户机的 Web 请求所花的大致时间。

通过注解配置运行 filter

通过注解@WebFilter可以直接在过滤器的java源代码文件中完成配置这样就无需在web.xml配置映射了
常用配置项:

参数: urlPatterns
作用: 配置要拦截的资源  以指定资源匹配,例如:"/hello.jsp"  以目录匹配,例如:"/Servlet/*"  以后缀名匹配,例如:"*.jsp"  通配符,拦截所有web资源,例如:"/*"
参数: initParams
作用: 配置初始化参数

参数: dispatcherTypes
作用: 配置拦截的类型,可配置多个
默认为DispatcherType.REQUEST

其中DispatcherType是个枚举类型,有下面几个值
FORWARD //转发的INCLUDE //包含在页面的REQUEST //请求的ASYNC //异步的ERROR //出错的

过滤器分类:
Java Web 基础 JSP Filter

创建GlobalFilter.java,并实现Filter接口的三个方法
Java Web 基础 JSP Filter

Java Web 基础 JSP Filter

通过 web.xml 配置运行 filter

设置Filter
作用: 定义这个Filter等待其它程序调用

例如:

<filter>  <!-- 类名 -->  <filter-name>HelloFilter</filter-name>  <!-- 所在的包路径 -->  <filter-class>com.Filter.HelloFilter</filter-class></filter>

常用配置项
标签: <url-pattern> </url-pattern>
作用: 配置要拦截的资源

  以指定资源匹配,例如:"/hello.jsp"  以目录匹配,例如:"/Servlet/*"  以后缀名匹配,例如:"*.jsp"  通配符,拦截所有web资源,例如:"/*"

注意: 设置了这个才会正常运行这个filter
标签: <init-param> </init-param>
作用: 配置初始化参数

标签: <dispatcher> </dispatcher>
作用: 配置拦截的类型,可配置多个
默认为DispatcherType.REQUEST

多个filter的执行

WEB服务程序是可以支持多个过滤器的。

假如一个URL和多个过滤器指定的URL相符时,会生成一个过滤器链。
Java Web 基础 JSP Filter
服务器会按照web.xml中过滤器定义的先后顺序组装成过滤器链。或者根据注解中的字母顺序来执行过滤器。
Java Web 基础 JSP Filter
在web.xml中,filter执行顺序跟的顺序有关,先声明的先执行

参考资料

https://www.cnblogs.com/yangyxd/p/5624145.html
https://xz.aliyun.com/t/10362
https://www.yuque.com/pmiaowu/gpy1q8/fqegl8#XSjUp

原文始发于微信公众号(红蓝安全):Java Web 基础 JSP Filter

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日23:37:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java Web 基础 JSP Filterhttp://cn-sec.com/archives/2193506.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息