查找使用 servlet 过滤器将内容插入响应的示例
我一直在搜索net和stackoverflow,寻找一个人使用servlet过滤器将内容插入响应的示例,但只能找到人们捕获/压缩输出和/或更改标头的示例。我的目标是在所有 HTML 响应的结束</正文之前附加一块 HTML>。
我正在研究一个解决方案,该解决方案将HttpServletResponseWrapper扩展到使用我自己的PrintWriter,然后覆盖其上的写入方法。在 write 方法中,我存储最后 7 个字符以查看它是否等于结束正文标记,然后编写我的 HTML 块和结束正文标记,然后继续对文档的其余部分执行正常的写入操作。
我觉得一定有人已经解决了这个问题,而且可能比我更优雅。我很感激任何如何使用 servlet 过滤器将内容插入响应的示例。
更新
作为对评论的回应,我还试图从 http://www.oracle.com/technetwork/java/filters-137243.html 实现CharResponseWrapper。这是我的代码:
PrintWriter out = response.getWriter();
CharResponseWrapper wrappedResponse = new CharResponseWrapper(
(HttpServletResponse)response);
chain.doFilter(wrappedRequest, wrappedResponse);
String s = wrappedResponse.toString();
if (wrappedResponse.getContentType().equals("text/html") &&
StringUtils.isNotBlank(s)) {
CharArrayWriter caw = new CharArrayWriter();
caw.write(s.substring(0, s.indexOf("</body>") - 1));
caw.write("WTF</body></html>");
response.setContentLength(caw.toString().length());
out.write(caw.toString());
}
else {
out.write(wrappedResponse.toString());
}
out.close();
我也包装了请求,但该代码有效,不应影响响应。