Mag*_*nus 6 java tomcat global servlet-filters
我需要对Web服务器执行所有收到请求的预处理和后处理.该功能既是网址级访问限制又是语言翻译,还包括需要全局处理的其他特殊情况.
通常,这可以通过servlet过滤器实现,但是当Web应用程序数量增长时,不希望将过滤器与每个应用程序捆绑在一起,因为在更改过滤器时需要重建和重新部署所有应用程序.
相反,我想在服务器上全局安装过滤器,我找到了两种可能的解决方案,我对它们中的任何一种都不满意.
在Tomcat上,可以在"lib"目录中部署服务器范围的过滤器,并配置服务器web.xml以将它们映射到传入请求.我看到的问题是任何过滤依赖性也需要在lib目录中全局部署.据我所知,这可能导致很难解决与已安装应用程序的依赖冲突.(如果Tomcat位于两个Web应用程序中,它们是否会将相同的库文件加载到内存中两次?)
在主要充当代理的简单Web应用程序中部署过滤器至少会将过滤器与其相应的依赖项捆绑在一起.然后,可以在服务器上部署此应用程序,并使用crossContext配置参数将所有传入请求转发到目标应用程序之前.(Tomcat实例之间的RequestDispatcher转发)但是,这需要摆弄url,以便所有链接指向"代理".
这些解决方案似乎都不令人满意.它们都依赖于平台,因为它们依赖于Tomcat.他们似乎都有可能的问题,需要特殊的依赖处理.
使用服务器范围的功能时最佳做法是什么?
这是我未经测试的想法(所以不是最佳实践) - 这是您列表中选项 2 的变体。
您可以使用Sitemesh(这实际上是为了用通用的页眉/页脚装饰您的多个 Web 应用程序 - 但在这种情况下不要使用页眉/页脚)。
使用 crossContext = true将 Sitemesh托管为单独的 Web 应用程序。
Sitemesh 将作为每个 Web 应用程序的过滤器被调用,因此最终用户看到的 URL 根本不会改变。但您必须为每个 Web 应用程序定义decortaor.xml。
您可以编写实际的过滤器处理器并将其链接到 Sitemesh 过滤器之后。所有请求将首先发送到 Sitemesh 应用程序 - 然后发送到您的过滤器 - 然后发送到 Web 应用程序中的单个 servlet。
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |