5

我已经实现了这样的过滤器,但这仅在请求进入时触发。我想在响应输出时拦截响应,即当响应从控制器返回时。

我知道 Spring 拦截器,它为您提供了在请求到达控制器之前和之后处理请求的功能。我想做这样的事情。

public class ServiceSessionManagementInterceptor implements Filter{

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    Map<String, String[]> maps = request.getParameterMap();

    System.out.println("test");
chain.doFilter(request, response);  
}

@Override
public void destroy() {
    // TODO Auto-generated method stub

}

}

4

1 回答 1

13

doFilter()就是魔法发生的地方。在它之前放置的任何内容都将在 servlet 之前执行,而在它之后放置的所有内容都将在 servletservice()方法返回后执行(包括转发/包含等)。

@Override
public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException, ServletException {

    System.out.println("before");
    chain.doFilter(request, response);  
    System.out.println("after");
}

这样你就可以用你自己的实现包装ServletRequest和对象来添加功能,例如:压缩。ServletResponse

请注意,Interceptor在处理程序方法执行之前和之后都会调用 Spring。servletFilterServlet.

于 2013-08-01T23:59:50.553 回答