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
相关产品推荐
相关产品推荐

