作为经验法则,
过滤器在每个请求之前运行。 Struts 本身就是一个过滤器。
拦截器可以在 Struts 操作之前或之后运行。如果请求不以 .action 结尾,则它们不会运行。
因此,一些过滤器的示例可能包括:
如果要压缩 js 和 css 文件,则应使用过滤器而不是拦截器。
如果您只希望某些 IP 地址访问您的网站,则必须将其开发为过滤器并检查请求 IP 地址。
如果要保护您的网站免受 CSRF 攻击,则必须编写一个过滤器来检查请求中的 CSRF 令牌。
如果要记录您的网站响应时间,请使用过滤器在 chain.doFilter(request, response) 之前和之后计算时间。
理论上,您可以开发一个 Struts Web 应用程序,而无需开发自己的拦截器,只使用过滤器。但是,您将面临许多问题和代码锅炉过滤器。
许多struts 2功能都是使用拦截器构建的,您可以在struts-default.xml(
https://struts.apache.org/docs/struts-defaultxml.html)中找到它,该列表将帮助您找到何时可以使用拦截器。 (例如,
ParametersInterceptor
在
操作之前运行以将提交的表单值应用于操作)。
在使用拦截器时,您可以轻松访问struts功能,例如从消息资源获取
getText
、获取当前操作名称和命名空间、更改操作流程。
考虑上述情况,以下是可以通过拦截器开发的一些案例:
- 如果您希望只有已登录的用户才能访问某些操作,则必须使用拦截器进行开发。
- 如果您想跟踪用户正在导航的操作。您可以使用拦截器来跟踪访问的操作。
- 如果您想在单个点处理操作错误,则可以使用拦截器捕获所有
invocation.invoke()
拦截器为struts操作提供了过滤器和责任链设计模式,而过滤器则为整个Web应用程序提供此模式。