我正在尝试将其URLRewriteFilter
与许多不同类型的资源结合使用。它非常适合静态资源和常规 servlet。然而,对于基于 JAX-RS 的服务,我得到了 404。
情况是这样的:有两个 Web 应用程序:
base
base#nested
/base/Something/nested/furtherPath
需要转发到的请求/base/nested/furtherPath
。/base
这意味着从上下文转发到/base/nested
上下文。
为此,我在/base
上下文中配置了 URLRewrite 过滤器:
<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>DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
规则(urlrewrite.xml
)如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite use-context="true">
<rule>
<from>/base/([^/]*)/([^/]*)/(.*)</from>
<to type="forward" context="base/nested">/$3</to>
</rule>
</urlrewrite>
上下文的crossContext
属性/base
设置为true
。
这对于常规 servlet 和静态资源非常有效,但不适用于 JAX-RS 服务。我在 TomEE JAX-RS 1.6.0 中执行此操作。
感谢您的帮助!