【问题标题】:Tuckey UrlRewriteFilter and Struts2 gives 404 on first requestTuckey UrlRewriteFilter 和 Struts2 在第一次请求时给出 404
【发布时间】:2013-10-30 04:36:50
【问题描述】:

我重写的链接中有大约 30 个可以正常工作,但我有几个第一次调用时不起作用,但第二次调用时确实起作用!

这是 web.xml sn-ps:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
        <param-name>actionPackages</param-name>
        <param-value>uk.co.prodia.prosoc.struts2.action</param-value>
    </init-param>
</filter>
<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

这是第一次调用时给出 404 的 urlrewrite.xml:

<rule>
    <from>^/forgotten-password$</from>
    <to>/unsecured/forgotten-password!input.action</to>
</rule>

以及该操作的 struts2 配置:

<package name="unsecured" extends="struts-default" namespace="/unsecured">
    <action name="forgotten-password" class="actionForgottenPassword">
        <result name="input">/WEB-INF/view/unsecured/forgotten-password.jsp</result>
        <result name="passwordNotFound">/WEB-INF/view/unsecured/forgotten-password.jsp</result>
    </action>
</package>

但是,如果我让 urlrewrite.xml 通过包含 forgotten-password 操作的 unsecured 包,那么它可以工作:

<rule>
    <from>^/unsecured/forgotten-password$</from><!--works through /unsecured -->
    <to>/unsecured/forgotten-password!input.action</to>
</rule>

似乎 urlrewrite 中缺少 Struts2 包名称会导致第一次使用 URI 时出现 404。

这对任何人都有意义吗,还是我应该留在疯狂的小镇?

【问题讨论】:

  • 我认为他们的通配符映射需要我想删除的 URL 中的包名称(但我已经很长时间没有查看它了) - 因此是 URLRewriteFilter。
  • 包名不是必需的,它是您为每个包定义的namespace

标签: struts2 http-status-code-404 tuckey-urlrewrite-filter


【解决方案1】:

问题似乎是由上下文的第一页加载时 URL 中的 jsessionid 引起的。我对正则表达式有点没用,但这似乎有效:

<rule>
    <from>^/forgotten-password(;jsessionid=.*)?$</from>
    <to>/unsecured/forgotten-password!input.action</to>
</rule>

我在每个规则的末尾添加了(;jsessionid=.*)?,它似乎有效。

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    相关资源
    最近更新 更多