我有一个Web过滤器,它将处理发布请求,获取参数并在会话中设置其值。然后,在处理该属性的另一个页面的模型中设置会话属性的值。例如
过滤器中的代码段
if (httpServletRequest.getParameters("MY_PARAM") == null) {
logger.error("Parameter is null!");
throw new IllegalArgumentException("Parameter null!");
} else {
logger.error("Parameter received redirecting to controller");
httpServletRequest.getSession().setAttribute("MY_ATTR", httpServletRequest.getParameters("MY_PARAM"));
//redirect code
}
然后在控制器中
@GetMapping("mypage")
public ModelAndView doStuff(HttpSession session)
ModelAndView mav = new ModelAndView("mypage");
mav.addObject("MY_ATTR", session.getAttribute("MY_ATTR"));
session.setAttribute("MY_ATTR", null);
logger.debug(mav.getModel().get("MY_ATTR") == null ? "Attribute is null" : "Attribute is set");
return mav;
}
99%的时间日志输出为“属性已设置”,但有时为“属性为空”。这怎么可能发生?
我在控制器方法中进行了更多调试。发生此问题时,HttpSession似乎与在Web筛选器中设置属性的HttpSession不同。