gpt4 book ai didi

Java:从 Controller 返回后如何在过滤器上进行拦截

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:48:35 26 4
gpt4 key购买 nike

我已经实现了一个像这样的过滤器,但这只在请求传入时触发。我想在响应发出时拦截它,即当响应从 Controller 返回时。

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

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");
}

通过这种方式,您可以使用自己的实现包装 ServletRequestServletResponse 对象以添加功能,例如:压缩。

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

关于Java:从 Controller 返回后如何在过滤器上进行拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18006516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com