小编Hip*_*ppo的帖子

使用 ContentCachingResponseWrapper 丢失标头

我必须记录响应正文和响应标头。为此,我使用 Interceptor 和ContentCachingResponseWrapper类(我也尝试过使用过滤器,但结果相同)。当我将两者结合起来时,我会丢失一些 HTTP 标头信息,但如果我仅使用拦截器则不会丢失。

我的调度程序 servlet:

@Component("dispatcherServlet")
public class MyDisPatcherServlet extends DispatcherServlet {

    @Override
    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            super.doDispatch(request, new ContentCachingResponseWrapper(response));
        } catch (Exception e) {
            super.doDispatch(request,response);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ContentCachingResponseWrapper当我在拦截器的postHandle中使用时:

private Map<String, List<Object>> getHeaders(HttpServletResponse response){
    Map<String, List<Object>> headersList = new HashMap<>();
    Collection<String> headerNames = ((ContentCachingResponseWrapper)response).getHeaderNames();
    // Same if I use response.getHeaderNames()
    if (headerNames != null) {
        for (String headerName : headerNames) {
            headersList.put(headerName, Arrays.asList(response.getHeaders(headerName))); 
        }
    }
    return headersList; …
Run Code Online (Sandbox Code Playgroud)

spring-mvc interceptor spring-boot

5
推荐指数
1
解决办法
1928
查看次数

标签 统计

interceptor ×1

spring-boot ×1

spring-mvc ×1