日志拦截器报错Cannot create a session after the response has been committed

错误信息

日志拦截器AppLogInterceptor在方法处理完成之后,会对操作相关信息如参数、方法名、session信息等内容进行记录。

但是今天有同事开发时报错:

Cannot create a session after the response has been committed

相关代码如下:

public class AppLogInterceptor extends HandlerInterceptorAdapter {

    @Override
    public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Object handler, Exception e)
                throws Exception {
        if (handler instanceof HandlerMethod) {
            HttpSession seesion = request.getSession();
        }
    }
}

错误分析

错误原因:

  • 在Response响应(response.getOutputStream())之后,才创建Session(request.getSession())。
  • 而此时已经找不到Session ID,所以会报错。

解决办法

在Response响应(response.getOutputStream())之前进行Session创建(request.getSession())。

比如,在Controller的方法中添加如下代码:

request.getSession();
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页