spring boot 过滤器

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)
        {
        }
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_43245707/article/details/84937055