错误信息
日志拦截器AppLogInterceptor
在方法处理完成之后,会对操作相关信息如参数、方法名、session信息等内容进行记录。
但是今天有同事开发时报错:
Cannot create a session after the response has been committed
相关代码如下:
public class AppLogInterceptor extends HandlerInterceptorAdapter {@Overridepublic 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();