我已经实现了这样的过滤器,但只有在请求进入时才会触发.我想在出路时拦截响应,即从控制器返回响应时.
我知道Spring Interceptor会给你在触及控制器之前和之后处理请求的功能.我想做那样的事情.
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
}
Run Code Online (Sandbox Code Playgroud)
}
这doFilter()是魔术发生的地方.无论你在它之前放置什么,它都将在servlet之前执行,你在它之后放的所有内容都将在servlet service()方法返回后执行(包括forward/include等).
@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");
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以使用自己的实现来包装ServletRequest和ServletResponse对象以添加功能,例如:压缩.
请注意,Interceptor在执行处理程序方法之前和之后调用Spring .servlet Filter在a之前和之后执行Servlet.