0

我想使用 Servlet 过滤器实现一些 URL 重写,类似于众所周知的 Tuckey 的 URLrewritefilter。我很乐意使用 Tuckey 的代码,但我有一些无法满足的要求。

无论如何,我像这样在过滤器链的顶部创建了一个 servlet 过滤器

<filter>
  <filter-name>URLRewriteFilter</filter-name>
  <filter-class>com.my.app.URLRewriteFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>URLRewriteFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
...
more filters with similar mappings

在过滤器中,我包装了响应,用于覆盖 encodeURL 方法,效果很好!

我的问题在于入站 URL:我将尝试将任何请求 url 与我的入站重写规则匹配,如果匹配,我将发送重定向(有工作)或转发。在转发的情况下,不会处理以下所有过滤器,因为它们DispatcherType.REQUEST仅具有默认调度程序映射。这是正确的,他们不需要在每次转发到我的所有 JSP 等时运行。我只希望他们处理一次传入的请求。我知道我可以添加<dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher>到以下 20 个过滤器中的每一个,但这感觉不对。

我试图通过包装请求并覆盖getDispatcherType()要返回的方法DispatcherType.REQUEST而不是FORWARD. 但这不起作用。

我敢打赌 Tuckey 的实现也有同样的问题,因为它也使用前锋。

有什么好办法吗?有任何想法吗?

4

0 回答 0