【发布时间】:2012-03-23 01:22:17
【问题描述】:
我想包装和修改对我的 Java EE/tomcat 应用程序的 HTTP 请求的响应。也就是说,我有许多生成结果的 Struts 2 操作,我想在它们上放置一个前端来修改响应以执行隐藏链接等操作。修改每个源是不可能的因为它们数量众多,种类繁多。
我知道我可以编写一个 Servlet 过滤器来做我想做的事,但我想构建一个标准的、经过充分测试的解决方案,而不是重新发明轮子。我已经搜索了一个,Java EE 文档中有一些地方描述了这种野兽,但找不到可以下载的。
编辑:有些 cmets 认为这是一个糟糕的主意。我愿意接受关于更好的建议。情况是我有大量的动作,写了很长一段时间,我想对它们的输出进行各种系统的修改。我不想修改所有操作,因为这违反了 DRY(并且会做大量工作)。在我看来,这正是过滤器的用途——本质上是用于 HTTP 响应的 AOP。我想错了吗?
编辑#2:至于改变的意义,很难说。在向页面添加大量新内容的意义上,它通常并不重要。它更多的是扫描响应并进行相对较小的更改:例如,在某些条件下向链接添加类,在页面的各个位置注入少量代码,或者(在极端情况下)剪掉一个不应该出现的 div用户。我想说最大的问题是该系统由大约 4000 个独特的页面组成,每个页面由使用几种不同技术的单独操作和/或视图生成。我们可以说这个系统结构很糟糕,但这就是生活在一个非常大的、15 年前的软件上工作的现实。我的另一个想法是只实现一个过滤器来进行扫描,并在 javascript 中注入修改。这在真正与安全相关的情况下没有帮助(即,甚至不想让用户看到内容),但它可能有助于主要为了用户方便而进行的许多其他情况。感谢大家的讨论,请继续讨论。
【问题讨论】:
-
所以你想解析响应,修改DOM,然后发回?糟糕。
-
如果你提供了一些关于你需要做的确切工作的更多细节。更改实际上是否是一项重大更改,您可以合理地期望这需要大量工作(并且使用 servlet 过滤器显然是一种 hack)?还是现有的代码,结构不是很好,所以应该是一个小的改动,实际上是大的和有风险的?
-
我编辑了我的文字以包含您的问题。感谢您的回复。
-
对不起,我没有回复。下面的 Rick Mangi 总结得很好。您提出的建议听起来很讨厌,但是如果您必须进行这些更改并且使用的代码库不是很好,那么这当然是一种方法。但请注意,这是一个 hack,这将使以后的维护变得更加困难。在某些时候,您必须硬着头皮修复底层代码(或将其扔掉:-))
标签: java jakarta-ee servlet-filters