You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Struts 6.2中UrlRewrite规则不生效,Action无法匹配求助

问题:Struts 6.2 集成 UrlRewrite 4.0.3 内部重写规则失效问题

我在 Struts 6.2 中使用 UrlRewrite 4.0.3,编写了如下重写规则:

<urlrewrite>
    <rule match-type="regex">
       <from>/callback/hamoon-handler.ib/sign/(\w+)</from>
       <to>/callback/hamoon-handler.ib?sign=$1</to>
    </rule>
</urlrewrite>

该规则无法正常生效,通过 curl 测试得到以下现象:

  • 直接访问带参数的 URL 可正常匹配 Struts Action:

    curl "https://localhost/callback/hamoon-handler.ib?sign/v1" --header "Content-Type: application/json" --data "{ \"test\": \"1\"}"
    
  • 经过 UrlRewrite 处理的 URL 请求报错:The requested resource [/callback/hamoon-handler.ib] is not available,请求命令如下:

    curl "https://localhost/callback/hamoon-handler.ib/sign/v1" --header "Content-Type: application/json" --data "{ \"test\": \"1\"}"
    

查看日志发现 URL 重写已成功完成:

utils.ServerNameMatcher DEBUG: looking for hostname match on current server name localhost
UrlRewriteFilter DEBUG: checking for status path on /callback/hamoon-handler.ib/sign/v1
UrlRewriter DEBUG: processing request for /callback/hamoon-handler.ib/sign/v1
RuleBase DEBUG: Rule 0 run called with /callback/hamoon-handler.ib/sign/v1
RuleBase DEBUG: matched "from"
substitution.MatcherReplacer DEBUG: found 1
substitution.MatcherReplacer DEBUG: replaced sb is /callback/hamoon-handler.ib?sign=v1
RuleExecutionOutput DEBUG: needs to be redirected to /callback/hamoon-handler.ib?sign=v1
UrlRewriter TRACE: got a rewritten url
RewrittenUrl TRACE: doRewrite called
RewrittenUrl TRACE: redirected to /callback/hamoon-handler.ib?sign=v1

将 <to> 改为 <to type="redirect"> 并让 curl 跟随重定向后,Action 可正常匹配,但调用方不支持重定向,无法采用此方案。

UrlRewriteFilter 已配置在 StrutsPrepareAndExecuteFilter 之前,web.xml 配置如下:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
     <init-param>
        <param-name>logLevel</param-name>
        <param-value>TRACE</param-value>
    </init-param>
</filter>
 <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</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>
</filter-mapping>

请问是否有可行的解决办法?

内容的提问来源于stack exchange,提问作者Alireza Fattahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:02:26