servlet的filter使用替换流
来源:互联网 发布:f0改装轮毂数据 编辑:程序博客网 时间:2024/06/05 03:16
servlet过滤器工作流程
servlet过滤器在request到达servlet前可以拦截,在response到达客户端之前可以捕获。这样便可以在过滤器中处理一些请求响应的前置操作或通用操作。
常见的一种应用就是进行敏感词过滤。
但是如果直接使用HttpServletResponse
,这是一个流,无法对已经out.println()
的内容进行修改。所以这里需要替代流。
替代流(stand-in stream)
原理
在请求到达servlet之前拦截HttpServletResponse
,将HttpServletResponse
封装成替代流,之后servlet操作的对象即是这个封装后的替代流。这里的封装本质上就是建立一个输出缓冲区,servlet的所有输出都输出到了这个缓冲区,并没有直接写入真正的HttpServletResponse
。
然后在响应返回阶段,捕获之前封装的HttpServletResponse
,然后将servlet中输出到缓冲区的内容,进行敏感词过滤。
实现
利用HttpServletResponseWrapper
包装HttpServletResponse
,并重写输出流的方法。
一种实现方法如下:
public class BufferedResponse extends HttpServletResponseWrapper { private PrintWriter printWriter; private CharArrayWriter charArrayWriter; public BufferedResponse(HttpServletResponse response) { super(response); charArrayWriter = new CharArrayWriter(); printWriter = new PrintWriter(bufferedWriter); } @Override public PrintWriter getWriter() { return printWriter; } public String getOutput() { return charArrayWriter.toString(); } }
过滤器中使用:
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { BufferedResponse bufferedResponse = new BufferedResponse(servletResponse); // filterChain.doFilter 这里指继续处理后续步骤 filterChain.doFilter(servletRequest, bufferedResponse); //这里servlet已经处理完,output即servlet的输出,在这里替换敏感词 String output = bufferedResponse.getOutput(); }
以及如果对CharArrayWriter陌生,点击这里 CharArrayWriter
阅读全文
0 0
- servlet的filter使用替换流
- servlet的filter的使用
- javax.servlet.Filter的使用
- javax.servlet.Filter 的过滤器的使用
- javaWeb Servlet的Filter的使用
- javaWeb Servlet的Filter的使用
- springboot 使用Servlet,Filter,Listener的方法
- Servlet容器Filter的使用(Filter解决乱码问题实例)
- Servlet过滤器Filter使用
- Servlet中的filter使用
- Servlet过滤器Filter使用 .
- 使用filter进行文本替换
- Servlet的Filter过滤器
- Servlet的Filter过滤器
- Servlet/Filter 的生命周期
- 关于servlet的filter
- filter、servlet的区别
- Servlet/Filter 的生命周期
- 【基础】UEFI HOB
- C#游戏开发基础05
- 191. Number of 1 Bits
- quartz 调度表达式 js解析。常规使用足够。。W # C 表达式暂不支持。
- ubuntu 16.04chrome的安装
- servlet的filter使用替换流
- 【一起玩esp8266】flash的擦除方法
- 软件系统架构分析之一:传统socket通讯阻塞现象分析
- utils/deb_verify.sh
- 浏览器被Hao123劫持
- https之证书验证
- vim学习笔记
- 刷新页面的方法
- poi实现超简单的通用excel导出