过滤器会针对传入请求触发,但不会针对响应触发。
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
}
}
doFilter()
是魔法发生的地方。无论您在它之前放置的内容都将在 servlet 之前执行,而您在其之后放置的所有内容都将在 servlet service()
方法返回之后执行(包括转发/包含等)。
@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
对象以添加功能,例如:压缩。
请注意,在处理程序方法执行之前和之后都会调用 Spring
Interceptor
。 Servlet Filter
在 Servlet
之前和之后执行。