使用servlet进行URL重写过滤前进使其他过滤器无法使用

时间:2013-06-18 19:42:04

标签: java url java-ee url-rewriting servlet-filters

我想使用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与我的入站重写规则匹配,如果匹配,我要么发送重定向(带有作品)要么发送。 如果是转发,则不会处理以下所有过滤器,因为它们只有映射DispatcherType.REQUEST的默认调度程序。这是正确的,他们不需要在我的所有JSP等每个前进上运行。我只是希望他们处理一次传入的请求。我知道我可以在以下20个过滤器中添加<dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher>,但这感觉不对。

我尝试通过包装请求并覆盖getDispatcherType()方法来返回DispatcherType.REQUEST而不是FORWARD来欺骗容器。但这不起作用。

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

这有什么好办法吗?有什么想法吗?

0 个答案:

没有答案