Java 重写ServletResponse中的内容

来源:互联网 发布:mac系统可以装ps吗 编辑:程序博客网 时间:2024/06/12 22:19

Java 重写ServletResponse中的内容,Java 修改response中的内容


1. 继承HttpServletResponseWrapper 重新覆盖Response对象

package com.hbzx.interceptor;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;public class UrlResponseWrapper extends HttpServletResponseWrapper {private ByteArrayOutputStream buffer = null;private ServletOutputStream out = null;private PrintWriter writer = null;public UrlResponseWrapper(HttpServletResponse resp) throws IOException {super(resp);buffer = new ByteArrayOutputStream();// 真正存储数据的流out = new WapperedOutputStream(buffer);writer = new PrintWriter(new OutputStreamWriter(buffer));}@Overridepublic ServletOutputStream getOutputStream() throws IOException {return out;}@Overridepublic PrintWriter getWriter() throws UnsupportedEncodingException {return writer;}@Overridepublic void flushBuffer() throws IOException {if (out != null) {out.flush();}if (writer != null) {writer.flush();}}@Overridepublic void reset() {buffer.reset();}public byte[] getResponseData() throws IOException {flushBuffer();return buffer.toByteArray();}public String getContent() throws IOException{flushBuffer();return buffer.toString();}private class WapperedOutputStream extends ServletOutputStream {private ByteArrayOutputStream bos = null;public WapperedOutputStream(ByteArrayOutputStream stream) throws IOException {bos = stream;}@Overridepublic void write(int b) throws IOException {bos.write(b);}@Overridepublic void write(byte[] b) throws IOException {bos.write(b, 0, b.length);}@Overridepublic void write(byte[] b, int off, int len) throws IOException {bos.write(b, off, len);}}}

2. 编写Filter

package com.hbzx.interceptor;import java.io.IOException;import java.io.OutputStream;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;import org.springframework.http.MediaType;public class UrlImageFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {UrlResponseWrapper responseWrapper = new UrlResponseWrapper((HttpServletResponse) response);chain.doFilter(request, responseWrapper);String contentType = responseWrapper.getContentType();byte[] content = responseWrapper.getResponseData();if(StringUtils.isNotBlank(contentType) && (contentType.contains(MediaType.APPLICATION_JSON_VALUE) || contentType.contains(MediaType.TEXT_HTML_VALUE))) {String str = new String(content);str = StringUtils.replace(str, "xxxx", "aaaa");content = str.getBytes();}OutputStream out = response.getOutputStream();out.write(content);out.flush();}@Overridepublic void init(FilterConfig arg0) throws ServletException {}}

3. 在web.xml 中配置filter

<filter> <filter-name>urlFilter</filter-name> <filter-class>com.hbzx.interceptor.UrlImageFilter</filter-class></filter><filter-mapping><filter-name>urlFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>


原创粉丝点击