蓝色天空

走在IT的路上,随时需要抬头看看天空
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

过滤器中获取返回信息

Posted on 2020-10-13 22:52  my_house_station  阅读(1080)  评论(0编辑  收藏  举报

自定义过滤器(Filter), 获取返回值

public class ResponseWrapper extends HttpServletResponseWrapper {

private ByteArrayOutputStream buffer;

private ServletOutputStream out;

public ResponseWrapper(HttpServletResponse httpServletResponse) {
super(httpServletResponse);
buffer = new ByteArrayOutputStream();
out = new WrapperOutputStream(buffer);
}

@Override
public ServletOutputStream getOutputStream() throws IOException {
return out;
}

@Override
public void flushBuffer() throws IOException {
if (out != null) {
out.flush();
}
}

public byte[] getContent() throws IOException {
flushBuffer();
return buffer.toByteArray();
}

class WrapperOutputStream extends ServletOutputStream {
private ByteArrayOutputStream bos;

public WrapperOutputStream(ByteArrayOutputStream bos) {
this.bos = bos;
}

@Override
public void write(int b) throws IOException {
bos.write(b);
}

@Override
public boolean isReady() {
return false;
}

@Override
public void setWriteListener(WriteListener arg0) {

}
}

自定义过滤器类CustomFilter实现Filter接口;

public class CustomFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
ResponseWrapper wrapperResponse = new ResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, wrapperResponse);
byte[] content = wrapperResponse.getContent();
if(content.length > 0) {
String str = new String(content, "UTF-8");
JsonObject fromJson = new Gson().fromJson(str, JsonObject.class);
if(fromJson.get("status").toString().equals("200")) {
//do something
}
}
}
@Override
public void destroy() {

}