【问题标题】:Struts2 exclude pattern - How exactly does it work?Struts2 排除模式 - 它究竟是如何工作的?
【发布时间】:2012-11-09 21:29:38
【问题描述】:

我正在尝试将 Struts2 应用程序(版本 2.2.1.1)迁移到 Spring MVC,但我很难将 struts.xml 映射转换为 SpringMVC servlet 映射。

我的第一个问题是 Struts2 排除模式究竟是如何工作的。假设在我的 web.xml 中,我为 struts2 设置了一个过滤器/映射,如下所示:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

在我的 struts.xml 中,我定义了一堆已经在工作的操作。现在根据我的理解,基于 struts2 文档 -

(从 Struts 2.1.7 开始,您可以提供一个逗号分隔的模式列表,当匹配 过滤器将通过的请求 URL。这是通过配置选项 struts.action.excludePattern 完成的,例如在您的 struts.xml 中)-

如果我添加排除模式,例如:

<constant name="struts.action.excludePattern" value="/*"/>

那么过滤器应该被绕过并且上面提到的操作不应该解决,对吗?

由于某种原因,这没有发生,我的所有操作仍在正确路由。

什么给了?

【问题讨论】:

    标签: java web-applications spring-mvc struts2


    【解决方案1】:

    排除模式是一个正则表达式。

    如果你想排除一切,你会想要.*

    http://struts.apache.org/2.x/docs/webxml.html#web.xml-SimpleExample

    我不确切知道为什么你会想要那个,因为你可以移除 S2 过滤器。

    【讨论】:

    • 感谢戴夫的回答。我并不是要排除所有内容,而是要了解该功能的工作原理。我正在将一个应用程序迁移到 Spring-MVC,并且我想并排运行 Struts2 / Spring-MVC。我发现我的问题实际上与我使用的 struts 过滤器有关。稍后我会发布详细信息。
    【解决方案2】:

    我得到了对上一个答案的补充。您可以按照here 的说明定义排除项。

    但是文档中似乎有一个错误。如果您需要转义一个点 '.'你只需要使用一个反斜杠:

    <struts>
    <constant name="struts.action.excludePattern" value=".*unfiltered.*,.*\.nofilter"/>
    ...
    </struts>
    

    【讨论】:

      【解决方案3】:

      struts 值必须遵守 java.util.regex.Pattern 类标准。 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

      所以,如果你想避免所有 /rest/* url 例如:

      /rest/[a-zA-Z_0-9]*
      

      如果,你需要处理一个带有多个参数的 REST Web 服务:

      /rest/[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*
      

      为了测试您的模式,您可以使用以下代码:

      Pattern pattern = Pattern.compile("/rest/[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*");
      String uri = "/rest/users/1/1";
      System.out.println(pattern.matcher(uri).matches());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-16
        • 2014-04-30
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        • 2016-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多