package com.zbkj.admin.filter; import com.zbkj.common.utils.RequestUtil; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.StandardCharsets; /** * 返回值输出过滤器 */ //@Component public class ResponseFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { ResponseWrapper wrapperResponse = new ResponseWrapper((HttpServletResponse) response);//转换成代理类 // 这里只拦截返回,直接让请求过去,如果在请求前有处理,可以在这里处理 filterChain.doFilter(request, wrapperResponse); byte[] content = wrapperResponse.getContent();//获取返回值 //判断是否有值 if (content.length > 0) { String str = new String(content, StandardCharsets.UTF_8); try { HttpServletRequest req = (HttpServletRequest) request; str = new ResponseRouter().filter(str, RequestUtil.getUri(req)); } catch (Exception e) { e.printStackTrace(); } //把返回值输出到客户端 ServletOutputStream outputStream = response.getOutputStream(); if (str.length() > 0) { outputStream.write(str.getBytes()); outputStream.flush(); outputStream.close(); //最后添加这一句,输出到客户端 response.flushBuffer(); } } } }