Struts 2 中的过滤器与拦截器

标签 filter struts2 interceptor

过滤器和拦截器之间有什么区别?我意识到拦截器在操作之前和之后以递归方式触发,并且过滤器可以配置为触发操作和某些 url 模式。但是你怎么知道什么时候使用每一个呢?

在我正在阅读的关于 Struts 2 的书中,似乎拦截器正在被推送,我什至按照教程编写了一个身份验证拦截器以确保用户登录。但是,如果用户尝试访问一个没有没有与之关联的 Action ,拦截器不会捕获它,这意味着我必须将一个 Action 与我想要安全的每个 jsp 相关联。这似乎不对。

我可以制作一个处理 URL 的身份验证过滤器,这样我就不必这样做了,但是,拦截器的意义何在?

最佳答案

最显着的区别是“拦截器”是 Struts 2 框架的一部分,并且只是由 Struts 2 框架完成的请求处理的一部分。另一方面,“过滤器”是 Servlet 规范的一部分;换句话说,它们是 Servlet API 的一部分。如果您使用的是 Struts 2,您应该使用拦截器来包装 Struts 2 操作的功能。如果您尝试将功能包装到传入您的 web 应用程序的请求中,但 Struts 2 未处理,那么过滤器可能更合适。

顺便说一句,整个 Struts 2 框架都部署在您的 web 应用程序中配置的过滤器中,在您的 web 应用程序的部署描述符 ( 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>

此过滤器配置为捕获所有请求 URL 模式,是整个 Struts 2 框架的入口点。

我希望这有帮助。

关于Struts 2 中的过滤器与拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256646/

相关文章:

java - 如何使用 css 设置迭代器的特定运行样式

pandas - 获取列中具有多个特定值的所有客户

r - 如何按条件和按组过滤我的 data.table?

jsp - 在 JSP 中使用 Java8 时间

java - 如何每 500 - 1000 毫秒刷新一次 div 标签?

java - OSGi 容器中的 Camel : Apply InterceptStrategy to all camel contexts

grails - Grails 3如何从拦截器访问 namespace

java - Kotlin CDI 拦截器未被调用

filter - 使用 solr.StandardFilterFactory 从新服务器上的现有核心升级 schema.xml 中的过滤器

google-sheets - 过滤 Google 表格中的非唯一数据集