首页 > 技术文章 > 过滤器拦截器监听器

judesheng 2019-04-03 15:59 原文

参考

web.xml

   <filter>
        <description>
        </description>
        <display-name>RatesRequestLoggerFilter</display-name>
        <filter-name>RatesRequestLoggerFilter</filter-name>
        <filter-class>com.citi.rates.common.rateslogger.RatesRequestLoggerFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>RatesRequestLoggerFilter</filter-name>
        <url-pattern>*.action</url-pattern>
        <servlet-name>aaa</servlet-name>
        <servlet-name>bbb</servlet-name>
    </filter-mapping>

Filter里获取HttpServletResponse内容

Filter

RatesHttpServletResponseWrapper wrapper = new RatesHttpServletResponseWrapper(httpServletResponse);
chain.doFilter(request, wrapper);
response.getWriter().write(wrapper.getResults());
response.getWriter().flush();
response.getWriter().close();

RatesHttpServletResponseWrapper

import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class RatesHttpServletResponseWrapper extends HttpServletResponseWrapper {
    
    private int httpStatus;
    
    private PrintWriter writer;
    private CharArrayWriter bufferedWriter;
    
    public RatesHttpServletResponseWrapper(HttpServletResponse response) {
        super(response);
        bufferedWriter = new CharArrayWriter();//This is the result in response
        writer = new PrintWriter(bufferedWriter);
    }
    
    public int getStatus() {
        return httpStatus;
    }
    
    public String getResults() {
        return bufferedWriter.toString();
    }
    
    /***
     * set the writer to PrintWriter
     */
    @Override
    public PrintWriter getWriter() throws IOException {
        return writer;
    }
    
    /***
     * Set the http response code
     */
    @Override
    public void setStatus(int sc) {
        httpStatus = sc;
        super.setStatus(sc);
    }
    
    /***
     * Set the http response code
     */
    @Override
    public void sendError(int sc) throws IOException {
        httpStatus = sc;
        super.sendError(sc);
    }
    
    /***
     * Set the http response code
     */
    @Override
    public void sendError(int sc, String msg) throws IOException {
        httpStatus = sc;
        super.sendError(sc, msg);
    }
    
}

推荐阅读