Java:如何在 Filter 从控制器返回后对其进行拦截

问题描述 投票:0回答:1

过滤器会针对传入请求触发,但不会针对响应触发。

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
    
}

}

java servlets
1个回答
20
投票

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
之前和之后执行。

© www.soinside.com 2019 - 2024. All rights reserved.