目录
传入数据的压缩request(前台后台统一压缩方式后台进行解压):
传回数据的压缩Response:
package com.pds.report.core.config.mvc;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.*;
import java.util.zip.GZIPOutputStream;
/**
* @description:
* @author: yunfei.zhao
* @date: Created in 2019/9/18 16:24
* @version: 0.0.1
* @modified By:
*/
public class GzipFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String headEncoding = ((HttpServletRequest) servletRequest).getHeader("accept-encoding");
if (headEncoding == null || (headEncoding.indexOf("gzip") == -1)) { // 客户端 不支持 gzip
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("----------------该浏览器不支持gzip格式编码-----------------");
} else { // 支持 gzip 压缩,对数据进行gzip压缩
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
ResponseWrapper mResp = new ResponseWrapper(resp); // 包装响应对象 resp 并缓存响应数据
filterChain.doFilter(req, mResp);
byte[] bytes = mResp.getBytes(); // 获取缓存的响应数据
System.out.println("压缩前大小:" + bytes.length);
System.out.println("压缩前数据:" + new String(bytes, "utf-8"));
ByteArrayOutputStream bout = new ByteArrayOutputStream();
GZIPOutputStream gzipOut = new GZIPOutputStream(bout); // 创建 GZIPOutputStream 对象
gzipOut.write(bytes); // 将响应的数据写到 Gzip 压缩流中
gzipOut.flush();
gzipOut.close(); // 将数据刷新到 bout 字节流数组
byte[] bts = bout.toByteArray();
System.out.println("压缩后大小:" + bts.length);
resp.setHeader("Content-Encoding", "gzip"); // 设置响应头信息
resp.setContentLength(-1);
resp.getOutputStream().write(bts); // 将压缩数据响应给客户端
}
}
@Override
public void destroy() {
}
/**
* 从response中得到返回的body要实现HttpServletResponseWrapper
* 同理从request得到传来的body要实现HttpServletRequestWrapper
*/
class ResponseWrapper extends HttpServletResponseWra