1.前置过滤器
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "UserFilter",urlPatterns = "/qingqiu")
public class UserFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.err.println("init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
int s=Integer.parseInt(request.getParameter("s").toString());
int t=Integer.parseInt(request.getParameter("t").toString());
System.err.println("doFilter");
System.err.println(s);
System.err.println(t);
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.err.println("destory");
}
}
2.后置过滤器(因为不能直接从response中获取值所以需要使用代理类)
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.demo.User;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebFilter(filterName = "UserFilter",urlPatterns = "/qingqiu")
public class UserFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.err.println("init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
int s=Integer.parseInt(request.getParameter("s").toString());
int t=Integer.parseInt(request.getParameter("t").toString());
System.err.println("doFilter");
System.err.println(s);
System.err.println(t);
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");
System.out.println("返回值:" + str);
List<User> li=JSON.parseArray(str,User.class);
try
{
//......根据需要处理返回值
for (User user:li){
user.setName("王八");
}
}
catch (Exception e)
{
e.printStackTrace();
}
//把返回值输出到客户端
ServletOutputStream out = response.getOutputStream();
out.write(JSONObject.toJSONString(li).getBytes());
out.flush();
}
}
@Override
public void destroy() {
System.err.println("destory");
}
}
代理类:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
* 返回值输出代理类
*
* @Title: ResponseWrapper
* @Description:
* @author
* @date 上午9:52:11
*/
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)
{
}
}
}