我们需要在 Struts2 中定制 StrutsPrepareAndExecuteFilter 吗?

Do we need StrutsPrepareAndExecuteFilter customization in Struts2?

我们正在使用 Struts2 StrutsPrepareAndExecuteFilterweb.xml中的配置为:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
    <init-param>
      <param-name>struts.devMode</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

我们需要在这个通用拦截器中实现authentication/permission。

什么是简单的方法?我们可以创建一个扩展 StrutsPrepareAndExecuteFilter 的自定义拦截器并在其中执行我们的实现吗?

您永远不应该对 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 进行自定义。

即使它不是 final 也不像其他框架那样 package protected,也没有必要扩展该过滤器。

您应该学习 Struts2 体系结构的基础知识。来自 Nutshell.

您可以看到基本的 Struts2 流程。 Struts2 作为一个过滤器来处理所有请求,并通过一堆利用 Struts2 框架的大部分功能和特性的拦截器将它们分派给操作。

所以如果你想添加一些像身份验证这样的特性,那么你应该首先考虑通过身份验证拦截器来扩展它。此拦截器应配置为在传入请求的每个操作上调用。在 struts2 adding interceptors in struts.xml for all action class.

中查看它是如何完成的

后面有一个 link,您可以使用它来编写自定义拦截器以进行身份​​验证。参见 Is there a way to redirect to another action class without using on struts.xml