JPC*_*JPC 22 struts2 filter interceptor
真的,过滤器和拦截器之间有什么区别?我意识到拦截器会在动作之前和之后触发,递归,并且过滤器可以配置为触发动作和某些url模式.但是你怎么知道何时使用每一个?
在我正在阅读Struts 2的书中,似乎拦截器正在被推动,我甚至按照教程编写了一个Authentication Interceptor以确保用户已登录.但是,如果用户试图访问一个不能访问的URL没有与之关联的动作,拦截器没有抓住它,这意味着我必须将动作与我想要保护的每个jsp相关联.这似乎不对.
我可以创建一个处理URL的身份验证过滤器,这样我就不必这样做了,但那么,拦截器有什么意义呢?
cha*_*had 45
最重要的区别是"拦截器"是Struts 2框架的一部分,并且只是Struts 2框架完成的请求处理的一部分.另一方面,"过滤器"是Servlet规范的一部分; 换句话说,它们是Servlet API的一部分.如果您使用的是Struts 2,则应该使用拦截器来绕过Struts 2操作包装功能.如果您试图围绕进入Web应用程序的请求包装功能,但不是由Struts 2处理,那么过滤器可能更合适.
顺便说一下,整个Struts 2 Framework部署在您的Web应用程序中配置的过滤器中,在您的webapp的部署描述符(web.xml)中声明,如:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
此过滤器配置为捕获所有请求URL模式,是整个Struts 2框架的入口点.
我希望有所帮助.
拦截器堆栈触发每个请求。
过滤器仅适用于为其定义的 url。
编辑 - 您可以根据需要使用一种或另一种。假设您需要验证每个请求都存在 cookie。用户拦截器。假设您需要针对某些请求(由 url 驱动)弹出一个外部应用程序,使用过滤器。
我认为拦截器是更常用的工具......
为什么你会有一个没有关联操作的网址?